【发布时间】:2019-05-12 06:49:02
【问题描述】:
我想在特定文本之前插入文本文件中的多行。我想用正则表达式选择特定的文本,文本是这样的:
//**insert_yannyann*//
『//**insert_yanyann*//』在b.txt中,b.txt就是这样
...
//**insert_yannyann*//
...
a.txt 是这样的:
1234
5678
9101
为了在 b.txt 的文本模式之前插入 a.txt 文本文件,我在 ubuntu 18.04 bash 命令中尝试了这个正则表达式。
sed -n -i -e '\/\/**insert_yannyann*\/\/ /r a.txt' -e 1x -e '2,${x;p}' -e '${x;p}' b.txt
即使我尝试了另一种正则表达式模式。
sed -n -i -e '//?\s*\*[(?=.*\insert_yannyann\b)]*?\*\s*//? /r a.txt' -e 1x -e '2,${x;p}' -e '${x;p}' b.txt
但是 sed 总是因为我使用了错误的正则表达式而向我显示错误消息。
我想让 b.txt 变成这样:
...
1234
5678
9101
//**insert_yannyann*//
...
我肯定会通过一些在线正则表达式工具检查其中两个正则表达式是否正确,但我不明白为什么 sed 向我显示错误消息。
\/\/**insert_yannyann*\/\/
//?\s*\*[(?=.*\insert_yannyann\b)]*?\*\s*//?
我不确定正则表达式规则在不同的编程语言中是否相同,有人可以解释为什么它不正确吗?
【问题讨论】:
-
关于
online regex tools它们不适合sed,因为正则表达式功能和语法非常不同.. 例如:sed 不支持环视 -
哦~,我明白了,所以我最好尝试另一种方法来达到同样的效果?
-
上面提到的重复问题中建议了多种方式,如果你知道要匹配的行不能是文件中的最后一行,我觉得
sed -e '\,//\*\*insert_yannyann\*//, { r a.txt' -e 'N}'是个不错的选择 -
嗯嗯嗯,好的。但我发现使用 {} 将文件与正则表达式分开比使用“/xxx/xxx/”更好,对吗?