【发布时间】:2020-09-22 01:19:34
【问题描述】:
我有一个包含多行的文件。我正在寻求帮助以仅修改与正则表达式模式匹配的这些行,然后在每个结果后添加一些文本。 我用的是mac,但是bash脚本会在linux上运行,不知道有没有关系。
即
someText
StringToSearch:
| isoCode |
someOthertext
StringToSearch:
| isoCode |
againSomOtherText
StringToSearch:
| isoCode |
在匹配“StringToSearch:”之后,我需要在每个“| isoCode |”之后添加“| uk |”,因此结果将类似于:
someText
StringToSearch:
| isoCode |
| uk |
someOtherText
StringToSearch:
| isoCode |
| uk |
againSomeOtherText
StringToSearch:
| isoCode |
| uk |
我的正则表达式是^\s*StringToSearch:\n[^\n]+,完整的工作示例可在link 之后的regex101 获得
我不知道如何使用 sed 在 bash 中实现它。
其实我的sed是这样的:sed -E 's,\^\s*StringToSearch:\n\([^\n]+\),| uk |,' < inputFile
【问题讨论】:
-
默认情况下 sed 逐行工作.. 所以你不能匹配
\n或执行多行匹配而不做一些额外的神秘事情.. 另外,regex101 不适合 grep 之类的 cli 工具/sed/awk 因为正则表达式的语法和功能有很大的不同 -
作为
sed的替代品,您可以使用awk,这让工作更轻松。 -
感谢大家的支持,我学到了有关该主题的有用提示。