仅当当前行中存在字符串时替换

我有这样一句话:

sed-i的/mystring/newstring/'$target

此命令将所有mystring更改为newstring

我现在想要的是:当程序看到mystring时,如果字符串searchstring存在,我如何检查当前行?如果存在,newstring1;否则,newstring0

解决方案

假设您的输入文件$target包含以下内容:

一些文本我的字符串其他一些文本
某些文本mystring搜索字符串
再给我一些文字

此命令:

sed-i-e'/searchstring/s/mystring/1//searchstring/!s/mystring/0/'$target

将其内容更改为:

一些文本0一些其他文本
一些文本1是一个搜索字符串
再给我一些文字

解释

该脚本包含两个用分号分隔的替换(s)命令

替换命令接受一个可选的地址范围,该地址范围选择应进行替换的行

在这种情况下,regexp地址用于为第一个命令选择包含搜索字符串的行;对于第二行,不包含搜索字符串的行(注意regexp否定匹配后的感叹号)

编辑

此命令将执行得更好,并产生相同的结果:

sed-i-e'/searchstring/s/mystring/1/;s/mystring/0/'$target

关键是命令是按顺序执行的,因此,如果在第一个命令完成后,当前行中仍然有mystring子字符串,那么肯定没有searchstring

感谢用户946850

发表评论