在包含这样的行的文件中:
# lorem ipsum blah variable
Run Code Online (Sandbox Code Playgroud)
我想#
在包含特定字符串的同一行中删除(注释)字符。是否sed
适合呢?
我正在努力让这个有条件的工作。我有一种“笨拙”的方式来做这件事;我可以用awk
或找到匹配的行号,sed
然后在单独的sed
命令中使用这个数字,但我相信这可以用更好的方式完成。
pet*_*rph 54
使用您要查找的字符串作为要操作的行的选择器:
sed '/ipsum/s/#//g'
Run Code Online (Sandbox Code Playgroud)
/ipsum/
选择包含“ipsum”的行,并且仅在这些行上执行后面的命令。您可以使用大括号运行更多命令
/ipsum/{s/#//g;s/@/-at-/g;}
Run Code Online (Sandbox Code Playgroud)
$ cat input.txt
# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
# lorem ipsum blue variable
Run Code Online (Sandbox Code Playgroud)
然后:
$ sed 's|# \(.*blue.*\)|\1|' input.txt
Run Code Online (Sandbox Code Playgroud)
给出:
# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
lorem ipsum blue variable
Run Code Online (Sandbox Code Playgroud)
它的工作原理如下:
该s
告诉sed
它应该替代正则表达式找到什么。
该模式# \(.*blue.*\)
分解为:找到一个哈希后跟一个空格。括号 ( \(
) 开始分组。.*blue.*
是blue
带有任何东西之前和之后的词。下一个括号 ( \)
) 结束分组。
替换 is \1
which 是对第一个分组括号内容的反向引用。