二重引用符付きのsedの使用

二重引用符付きのsedの使用

回答この質問:

sedバージョン 4.2.2では次の状況が見つかりました。

この入力から:

send host-name = gethostname();
    domain-name, domain-name-servers, domain-search, host-name,
#  option host-name "andare.swiftmedia.com";

2 行目からのみ文字列「host-name」を削除したいので、予想される出力は次のようになります。

send host-name = gethostname();
    domain-name, domain-name-servers, domain-search,
#  option host-name "andare.swiftmedia.com";

次に、次のコマンドを使用しました。

sed -e 's/" host-name,"//g' input_file

ただし、input_file の「host-name」文字列は削除されず、そのまま残ります。

二重引用符を使用しない場合:

sed -e 's/ host-name,//g' input_file

期待通りの出力が適切に得られます。

正しい方法は二重引用符を使用することだと思いましたが、なぜここで機能しないのかわかりません。

答え1

キャラクターは、"シェル内部に特別なものではありません'...。'実際、内部には'...' 特別なキャラクターはいないシェルの場合、結果として、"文字は に渡されsed、 にとって特別なものではありませんsed

コマンドはsed -e 's/" host-name,"//g'文字通り を検索しますが"   h o s t n a m e , "、存在しないため見つかりません。

関連情報