sed matchを使用している場合、行の最初の文字を削除する方法は?

sed matchを使用している場合、行の最初の文字を削除する方法は?

次の内容を含むテキストファイルがあります。

#[マルチライブラリ]

#[multilib]が存在する場合は、行から#を削除したいと思います。

私は試した:

sed -i 's/^#[multilib]/[multilib]/'

そして行から#は削除されません。

答え1

[文字は]正規表現で特別です。リテラル文字列を一致させるにはエスケープする必要があります。

sed -i 's/^#\[multilib\]/[multilib]/' file
# or
sed -i -E 's/^#(\[multilib\])/\1/' file

答え2

-iこれはインスパイアされた非標準および非移植性のオプションです。ここで直接使用することもできます。sedperl-iperl

perl -pi -e '$_ = substr($_, 1) if rindex($0, "#[multilib]", 0)' file

または正規表現を使用してください。

perl -pi -e 's/^#(?=\[multilib\])//' file

(?=...)一つはどこにありますか?積極的で積極的な#演算子なので、後ろに来るたびに先行を削除します[multilib]。 Perl正規表現では、sed正規表現と同様に、エスケープまたはエスケープに使用できる演算子[です。]\\Q[multilib]\E

関連情報