是否可以使用 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
,这是一个单词边界。
我正在尝试使用 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
,这是一个单词边界。