次の内容を含むテキストファイルがあります。
#[マルチライブラリ]
#[multilib]が存在する場合は、行から#を削除したいと思います。
私は試した:
sed -i 's/^#[multilib]/[multilib]/'
そして行から#は削除されません。
答え1
[
文字は]
正規表現で特別です。リテラル文字列を一致させるにはエスケープする必要があります。
sed -i 's/^#\[multilib\]/[multilib]/' file
# or
sed -i -E 's/^#(\[multilib\])/\1/' file
答え2
-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