是否可以使用匹配多个正则表达式的sed替换数字?

时间:2015-03-26 16:39:06

标签: regex bash shell sed cygwin

我正在尝试使用sed替换文件中的数字。可以使用\b<NUMBER>\b找到此号码。但是,我正在解析的文件中有注释,有时会有相同的编号,我想保持不变。 所有需要更换的行都类似于:

some_text <1 4 35 314 359>

完整的文件可能是这样的:

# This is not to be replaced: 314
some_text <1 4 35 314 359>

所以,如果我想替换314,我怎么能用sed呢? 我可以使用以下grep找到它:

grep -P "^[^#].*some_text <[ 0-9]*>" "<FILE>" | grep -e "\b314\b")

但我似乎无法找到用sed做到这一点的方法。我所用的旧行将替换该数字的所有条目:

sed -i "s/\b *314\b//" <FILE>

欢迎任何澄清或帮助!

感谢您的帮助!

/ G

2 个答案:

答案 0 :(得分:1)

您可以像这样使用sed:

sed '/some_text/s/\b314\b/789/' file
# This is not to be replaced: 314
some_text <1 4 35 789 359>

答案 1 :(得分:1)

您可以改用awk,跳过任何评论行:

awk '!/^#/{sub(/\y314\y/,789)}1' file

由于您在示例中使用了字边界,我假设您安装了GNU awk并且我使用了\y,这是一个字边界。