長いsed文字列から特殊文字をエスケープする方法

長いsed文字列から特殊文字をエスケープする方法

sedを使用してファイルの115行目にこの文字列を含めたいと思います。しかし、常に不明なコマンドについて文句を言います。他の質問で別の解決策に従いましたが、まだ解決していません。

sed '115"<"img src="\.\/index_files\/Logo\.png" width="200" height="160" align="right" border="0">"' index.html > test.html

ありがとうございます!

答え1

命令で"はないからだ。sedエラーメッセージが示すように、明確ではありません。

アドレス115の後にはコマンドが続く必要がありますsedi

  • その後、一部を削除してください"。その周り<とその後>
  • 次にsを脱出しないでください/。脱出する必要はありません。
  • iその後、コマンドはテキストのみを許可するので、何もエスケープしないでください。

これにより、次のような結果が得られます。sed '115 i <img src="./index_files/Logo.png" width="200" height="160" align="right" border="0">'

答え2

ユーザーリチャードは、コマンドの問題をよく説明し、sed実行したいことを実行するために必要な正しい編集スクリプトも提供します。

私はさまざまな状況で動作する代替案を提供しました。

このsedコマンドは、rデータ・ストリームの現在位置にファイルの内容を挿入します。

あなたのsedコマンドラインできるこのように書かれている

$ sed '115r /dev/stdin' index.html <data.in

sed '115r data.in' index.htmlこれは、115行目の後に挿入されたデータをファイルに保存したい場合data.inと同じ効果があります。

/dev/stdin標準入力を介して送信されたすべての内容を含む特別なファイル。

次のようにすることもできます(「here-strings」をサポートするシェルを使用)。

$ sed '115r /dev/stdin' index.html <<<"my string of stuff"

または

$ sed '115r /dev/stdin' index.html <<<"$myvariableofwonder"

明らかに、これは他のコマンドのパイプでも期待どおりに機能します。

$ sed -n '1,10p' myfile | sed '115r /dev/stdin' index.html

これにより、1〜10行が115行myfileに移動しますindex.html

関連情報