私はこの投稿の指示に従いました ファイル内の特定の文字列の後にテキストを挿入する方法は?
しかし、私はその指示がOSXには有効ではないと思います。
Bashを使用してソースファイルにテキストを追加したい
sed '/pattern/a some text here' ${sourceFile}
しかし、コマンドを実行すると、
"/ pattern/a some text here":コマンドaは\の後にテキストが続くことを期待します
編集
infile
という名前の新しいファイルを1行で作成しました
pattern
とbashスクリプト
#!/bin/bash
sed '/pattern/a\
text to insert' infile
スクリプトを実行すると、「パターン」がコンソールにエコーされますが、テキストは挿入されません。
編集
私もbashスクリプトを試しました
#!/bin/bash
sed '/pattern/a\
add one line\
\\and one more' infile
そしてターミナルはエコーします
pattern
add one line
\and one more
しかし、infileにはまだ1行あります
pattern
OSXにed
(見つかった ポジティブヒント )があるかどうかわからないので、別のオプションを次に示します。
grep -q pattern infile && ed -s infile <<< $'/pattern/\na\ntext to insert\n.\nw\nq' > /dev/null
これにより、次のコマンドがed
に送信されます。
/pattern/
-「パターン」を検索a
-その行の後に次のテキストを追加しますtext to insert
--テキスト.
-挿入されたテキストの終わりw
-更新されたファイルをディスクに書き込みますq
-終了しました>/dev/null
リダイレクトは、一致するed
行のpattern
のレポートを無音にすることです。
ed
コマンドの前に静かなgrep
を付けて、ファイルに「パターン」が存在することを確認してから、ed
に検索を依頼します。それ以外の場合は、混乱する?
from ed
パターン検索が失敗した場合。
sed
のインプレース編集オプション-i
を使用するのを忘れました。 sedはstream editor
であるため、入力に変更を加えることはありません。出力ファイルを入力に戻すように明示的に努力するか、可能な場合は-iオプションを使用する必要があります。
#!/bin/bash
sed -i '' -e '/pattern/a\
add one line\
\\and one more' \
infile