我有这样一句话:
sed-i的/mystring/newstring/'$target
此命令将所有mystring更改为newstring
我现在想要的是:当程序看到mystring时,如果字符串searchstring存在,我如何检查当前行?如果存在,newstring为1;否则,newstring为0
解决方案
假设您的输入文件$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