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
。