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

Is it possible to substitute a number using sed matching multiple regexp?

我正在尝试使用 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>

欢迎任何澄清或帮助!

感谢您的帮助!

/克

你可以像这样使用 sed:

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

您可以改用 awk,跳过任何注释行:

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

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