我正在尝试使用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
答案 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
,这是一个字边界。