web-dev-qa-db-ja.com

(OSXで)ファイル内の特定の文字列の後にテキストを挿入するにはどうすればよいですか?

私はこの投稿の指示に従いました ファイル内の特定の文字列の後にテキストを挿入する方法は?

しかし、私はその指示が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
1
the_prole

OSXにed(見つかった ポジティブヒント )があるかどうかわからないので、別のオプションを次に示します。

grep -q pattern infile && ed -s infile  <<< $'/pattern/\na\ntext to insert\n.\nw\nq' > /dev/null

これにより、次のコマンドがedに送信されます。

  1. /pattern/-「パターン」を検索
  2. a-その行の後に次のテキストを追加します
  3. text to insert--テキスト
  4. .-挿入されたテキストの終わり
  5. w-更新されたファイルをディスクに書き込みます
  6. q-終了しました

>/dev/nullリダイレクトは、一致するed行のpatternのレポートを無音にすることです。

edコマンドの前に静かなgrepを付けて、ファイルに「パターン」が存在することを確認してから、edに検索を依頼します。それ以外の場合は、混乱する? from edパターン検索が失敗した場合。

1
Jeff Schaller

sedのインプレース編集オプション-iを使用するのを忘れました。 sedはstream editorであるため、入力に変更を加えることはありません。出力ファイルを入力に戻すように明示的に努力するか、可能な場合は-iオプションを使用する必要があります。

#!/bin/bash
sed -i '' -e '/pattern/a\
add one line\
\\and one more' \
infile
1
Rakesh Sharma