我有一条线,如:
sed -i 's/mystring/newstring/' $target
Run Code Online (Sandbox Code Playgroud)
此命令将全部更改mystring为newstring.
我现在想要的是:当程序看到时mystring,如果字符串searchstring存在,我如何检查当前行?如果它存在,newstring是1; 否则newstring就是0.
Iho*_*nko 54
假设您的输入文件$ target包含以下内容:
some text mystring some other text
some text mystring a searchstring
just some more text
Run Code Online (Sandbox Code Playgroud)
这个命令:
sed -i -e '/searchstring/ s/mystring/1/ ; /searchstring/! s/mystring/0/' $target
Run Code Online (Sandbox Code Playgroud)
将其内容更改为:
some text 0 some other text
some text 1 a searchstring
just some more text
Run Code Online (Sandbox Code Playgroud)
该脚本包含两个替代(小号由分号分隔)的命令.
substitute命令接受一个可选的地址范围,该范围选择应该进行替换的行.
在这种情况下,regexp地址用于为第一个命令选择包含searchstring的行; 和第二个不包含searchstring的行(注意regexp取消匹配后的感叹号).
此命令将更好地执行并产生相同的结果:
sed -i -e '/searchstring/ s/mystring/1/ ; s/mystring/0/' $target
Run Code Online (Sandbox Code Playgroud)
的一点是,如果仍有一个命令顺序,因此执行了mystring在当前行的子串之后的第一个命令完则没有searchString的在它是肯定的.
感谢用户946850.
krl*_*mlr 15
这是来自sed one-liners页面:
优化速度:如果需要增加执行速度(由于输入文件较大或处理器或硬盘较慢),如果在给出"s /.../"之前指定了"find"表达式,则替换将更快地执行. ../"指示.从而:
Run Code Online (Sandbox Code Playgroud)sed 's/foo/bar/g' filename # standard replace command sed '/foo/ s/foo/bar/g' filename # executes more quickly sed '/foo/ s//bar/g' filename # shorthand sed syntax
速度不是问题的问题,但语法提示有助于制定解决方案:
sed -i '/searchstring/ s/mystring/1/; s/mystring/0/' $target
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39229 次 |
| 最近记录: |