我需要找到数据文件中包含 NO_ID 的所有行,然后用“待确认”替换字符串“已确认”。
我试过这个:
sed '/NO_ID/, s/confirmed/to be confirmed/' stats.txt
这似乎不起作用。
答案1
删除逗号。初始正则表达式充当后续s
命令的“地址”(此处显示的地址和命令之间的空格是可选的):
sed '/NO_ID/ s/confirmed/to be confirmed/' stats.txt
如果我们将单词替换为命令confirmed
中正则表达式匹配的内容,则可以进一步缩短:s
sed '/NO_ID/ s/confirmed/to be &/' stats.txt
如果您需要确保包含的行to be confirmed
不被修改:
sed '/NO_ID/ { /to be confirmed/!s/confirmed/to be &/; }' stats.txt
或者,
sed -e '/to be confirmed/b' -e '/NO_ID/ s/confirmed/to be &/' stats.txt
在这里,第一个命令首先检测包含的行NO_ID
并将替换应用于这些行,除非该行还包含to be confirmed
。第二个命令检测并跳过包含的行to be confirmed
(b
指令跳转到脚本末尾,导致该行不再被进一步修改而是打印)。不包含的行将to be confirmed
进行与原始命令相同的修改。
答案2
像这样:
sed '/NO_ID/ s/confirmed/to be confirmed/' stats.txt
# ^
这里没有逗号