sedコマンドをsedコマンドに置き換えようとしていますが、それが落ち続けるので、「ピケットフェンシング」の数時間後に私はここで質問します。RHEL6.7でsedをsedに置き換える
私はラインのこの種が含まれている様々なbashのスクリプトを持っている:
sed 's/a hard coded server name servername.//'
私はそれを交換したいと思います:
sed "s/a hard coded server name $(hostname).//"
注二重引用符の追加$は(ホスト名ように)が拡張されているので、これは私が予想していたよりやや厄介です。
だから、これは多くの私の最初だったが、失敗した試み:
cat file | sed 's!sed \'s\/a hard coded server name servername.\/\/\'!sed \"s\/a hard coded server name $(hostname).\/\/\"!g'
私はまた、問題領域を試してみて、対象とする部品に置き換える打破するためのsedの素敵な「-e」オプションを使用してみました。私は解決策に「-e」スイッチを使用していないだろうが、それはデバッグに便利である場合があります:
cat file | sed -e 's!servername!\$\(hostname\)!' -e 's!\| sed \'s!\| sed \"s!'
予想通り最初のsedの作品(空想何もここで起こっていない)、2番目は追加ので、何のポイントを失敗しません最後の二重引用符を置き換える必要があります。
この時点で私の歴史は混乱に陥り、失敗した試行をもう一度加えることはありません。
スクリプトはsedコマンドでいっぱいであり、スクリプト内の特定のコマンドを1つだけターゲットにしたいので、1つのコマンドで最初の置換を使いたいと思っていました。
すべてのアイデアをいただければ幸いです。
あなたが外または使用 '「\」 ''すべての内側の単一引用符のために二重引用符を使用する必要があり、単一引用符内の単一引用符をエスケープすることはできません。それはhttp://stackoverflow.com/q/29613304/258523がここに何か助けているかどうかを確認しました。 –
sedコマンド全体を二重引用符で囲んではいけません。また、将来の更新中に他のものが侵入するのを心配する必要があります。シェルが展開したい部分の一重引用符を打ち切ってください。 'sed '/ハードコードされたサーバ名' $(ホスト名) ''。// '' –
コマンドで単一の引用符を正しくエスケープしたと思ったので、@Etanを展開できますか? – Chris