regex - 使用 sed 进行多行搜索和替换的正则表达式
问题描述
我需要有一个正则表达式,它\n
在一行中间找到一个作为起点,之前的任何内容都是随机的,并在第二行的 15 位数字和 49 alpha 之后替换。我需要用空白替换所有这些,但第二行需要与第一行连接。
试图
sed -r -e '{N;s/\n[[:digit:]]{15}[[:space:]]{49}//}'
输入
QC HOH 0H0 CA
:70:NOFX TRADE TR
100000100200621 ADE RELATED WOOD PURCHASE
需要删除的是 TRADE TR 之后的换行并将 ADE RELATED 带到 TR 中,因此它拼写为 TRADE。
期望的输出
QC H0H 0H0 CA
:70:NOFX TRADE TRADE RELATED WOOD PURCHASE
解决方案
这可能对您有用(GNU sed):
sed -E 'N;s/\n[[:digit:]]{15}[[:space:]]{49}//;P;D' file
如果替换命令匹配,这将打开一个两行窗口并修改其中的第二个。它总是打印两行中的第一行,然后将其删除。
推荐阅读
- php - 只有变量应该通过引用传递 Magento 1
- r - blogdown `title` 不会显示在渲染的`_index.html` 上
- c# - 正则表达式用逗号分隔 - 不在括号或单引号内
- python - sqlalchemy 以字符串形式查找服务器版本,而不是类似字节的对象
- javascript - 在控制台中获取数据但在主输出中显示未定义
- c - container_of 宏不适用于 char* 或数组成员
- assembly - 为什么光标在真实硬件上不会垂直移动,但在虚拟机上会垂直移动?
- perl - perl - 这个程序上的while循环如何工作
- mysql - MySQL中是否有任何可用的功能可以将日期的结果分组为天数?
- php - MySQL 查询仅返回 COUNT