私はこれら2つのsedコマンドが同じであると予想しましたが、mozilla/DST_Root_CA_X3.crt
2番目の場合にのみ削除されます。なぜですか?
重要な場合は、sed 4.4とDebian Stretchを使用しています。
(stretch-arm64)ubuntu@ip-10-1-2-224:~$ sudo sed '#^mozilla/DST_Root_CA_X3.crt$#d' test-certificates.conf
mozilla/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt
mozilla/XRamp_Global_CA_Root.crt
mozilla/certSIGN_ROOT_CA.crt
mozilla/ePKI_Root_Certification_Authority.crt
mozilla/emSign_ECC_Root_CA_-_C3.crt
mozilla/emSign_ECC_Root_CA_-_G3.crt
mozilla/emSign_Root_CA_-_C1.crt
mozilla/emSign_Root_CA_-_G1.crt
mozilla/DST_Root_CA_X3.crt
(stretch-arm64)ubuntu@ip-10-1-2-224:~$ sudo sed '/^mozilla\/DST_Root_CA_X3.crt$/d' test-certificates.conf
mozilla/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt
mozilla/XRamp_Global_CA_Root.crt
mozilla/certSIGN_ROOT_CA.crt
mozilla/ePKI_Root_Certification_Authority.crt
mozilla/emSign_ECC_Root_CA_-_C3.crt
mozilla/emSign_ECC_Root_CA_-_G3.crt
mozilla/emSign_Root_CA_-_C1.crt
mozilla/emSign_Root_CA_-_G1.crt
ベストアンサー1
以下の内容はすべてsed
GNUだけでなく、どこでも機能しますsed
。
キャラクター#
コメントです。これは「コメントコマンド」と見なすことができ、sed
残りのディレクティブは無視できます。だからあなたの命令はする何も起こらないでしょう。
#
アドレスとして使用される正規表現の代替区切り文字として使用するには、を使用します\#...#
。#
代替区切り文字として使用したい文字には特別なものではありません。
そのキャラクターできないこの場合に使用される区切り文字はバックスラッシュと改行です。マルチバイト文字の使用も通常サポートされていません。
特別なエスケープなしでコマンド()#
で区切り文字として使用できます。s
s#...#...#
#
単純なコメント文字以上の役割を果たす唯一のケースは、sed
最初の2文字が編集スクリプトにあるときです#n
。これはオプションをsed
使用して実行するのと同じです-n
(各サイクルの終わりに編集バッファのデフォルト出力をオフにする)。
$ echo hello | sed -e 'y/h/y/'
yello
$ echo hello | sed -e '#n' -e 'y/h/y/'
$ echo hello | sed -e '#n' -e 'y/h/y/' -e p
yello