回答この質問:
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
,
"
、存在しないため見つかりません。