Answers:
将您要查找的字符串用作要操作的行的选择器:
sed '/ipsum/s/#//g'
/ipsum/选择包含“ ipsum”的行,并且仅在这些行上执行后面的命令。您可以使用花括号来运行更多命令
/ipsum/{s/#//g;s/@/-at-/g;}
sed -i '/ipsum/s/#[[:space:]]*//'来消除紧跟在后面的任何空格和制表符#。(4)您可能还需要考虑验证the #是该行中的第一个非空白字符。当前命令#将从该行删除prompt "Enter # of ipsums:"。
sed -i '/ipsum/s/^#[[:space:]]*//'?!(^表示行首,表示行$尾)-至少以gnu sed表示
^,但这是错误的。我经常通过将缩进代码放在#代码之前来注释掉缩进代码,因此#缩进了。我怀疑我是唯一这样做的人。
^&之间的空格#,因此更像这样:/ipsum/{/^[[:space:]]*#/s/#[[:space:]]*//}。尽管即使那样,#它仍然可能会引起问题(例如,在使用空格缩进/分隔的语言中)。
$ cat input.txt
# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
# lorem ipsum blue variable
然后:
$ sed 's|# \(.*blue.*\)|\1|' input.txt
给出:
# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
lorem ipsum blue variable
其工作方式如下:
该s告诉sed它应该替换正则表达式找到的内容。
该模式# \(.*blue.*\)可分解为:找到一个哈希,然后是一个空格。方括号(\()开始分组。之前和之后.*blue.*的词都是这个词blue。下一个括号(\))关闭分组。
替换是\1对第一个分组括号中内容的反向引用。
's/#//g'将删除所有的#行中的字符。如果这不是您想要的,请删除g(代表“ global”)。(2)要按位置编辑文件(按问题要求),请使用sed -i。