sedを使用してコーヒースクリプトに行を挿入しようとしていますが、最初のタブ文字を無視しているようです。
挿入するファイルには次の行があります。
karmaServer.start
次のように行の後に行を挿入したいと思います。
karmaServer.start
flags: ['--no-sandbox']
だから私はうまくいくべきだと思うsedスクリプトを書いた。
sed "/^\t\tkarmaServer.start/a\t\t\t\tflags: ['--no-sandbox']" build/unit-test.coffee
ところで結果が変です。私は次のようになります
karmaServer.start
t flags: ['--no-sandbox']
t
なぜ文字で行を始めるのか、文字を削除する方法を理解できません。
どんなアイデアがありますか?
答え1
コマンドに改行を追加する必要がありますsed
(その後、エスケープされた改行に対するシェルの処理を検討する必要があります)。
sed "/^\t\tkarmaServer.start/a\\
\t\t\t\tflags: ['--no-sandbox']" build/unit-test.coffee
GNUsed
マニュアルによると:
ㅏ\
テキスト埋め込み各改行の前にバックスラッシュが続くテキストを追加します。
これは非常に明確ではなく、このようにフォーマットされていません。 (ああ、コマンドで見ると特に明確ではありませんman
。)コマンドの形式がa
バックスラッシュ、改行文字、そして次のもので構成されていることがわかります。テキスト。つまり、左の列のすべての内容です。
質問コメントで指摘したように、sed
sは間違ったコマンドを処理する方法が異なります。 Spinellisは、sed
必須のバックスラッシュと改行以外に何かがあることを知らせるエラーを生成します。
% sed "/^\t\tkarmaServer.start/a\t\t\t\tflags: ['--no-sandbox']" /dev/null sed: 1: "/^\t\tkarmaServer.start ...": コマンドの最後の \ の後に追加文字 %
あなたの特別な選択は、残りの行をsed
次のように扱うようです。テキスト議論。ただし、最初のバックスラッシュはまだ次の必須バックスラッシュと見なされますa
。だからあなたが終わるのはテキスト主張は
t\t\t\tflags: ['--サンドボックスなし']
最初は、t
予想よりもタブが1つ少なくなります。