我有一个文本文件,其中包含以下内容:
#[多库]
如果 #[multilib] 完全存在,我想从行中删除 #。
我试过:
sed -i 's/^#[multilib]/[multilib]/'
并且它不会从行中删除#。
答案1
[
和字符]
在正则表达式中是特殊的。为了匹配文字字符串,需要对它们进行转义:
sed -i 's/^#\[multilib\]/[multilib]/' file
# or
sed -i -E 's/^#(\[multilib\])/\1/' file
答案2
请注意,这是一个受's启发的-i
非标准且不可移植的选项。这里也可以直接使用:sed
perl
-i
perl
perl -pi -e '$_ = substr($_, 1) if rindex($0, "#[multilib]", 0)' file
或者使用正则表达式:
perl -pi -e 's/^#(?=\[multilib\])//' file
哪里(?=...)
有一个积极的前瞻性#
运算符,因此只要后面跟着 ,它就会删除前导[multilib]
。在 perl 正则表达式中,就像在 sed 正则表达式中一样,[
,]
是运算符,您可以使用 进行转义,\
也可以使用 进行转义\Q[multilib]\E
。