1

Unix初心者はこちら。私は、単純な検索/置換を行う UNIX スクリプトに取り組んでいます。このスクリプトは、「_development」で終わる行を見つけて、文字列「password: test」を含む新しい行を追加することを目的としています。

#!/bin/sh

sed -e 's/$"_development"/ a\  password: test/'  original_file > new_file

これを実行してもエラーは発生しませんが、実際には必要なことを実行しません。新しい行を追加しますが、文字列は追加しません。この構文は機能するはずだと思います。Macでこれをクランクアウトしていることは問題ですか。最も重要なのは、私が間違っていることは何ですか?

4

3 に答える 3

1

Mac を使用している場合は、sed コマンドにリテラルの改行が必要になる可能性が非常に高くなります。

sed -e '/_development$/a\
   password: test/' 
于 2012-10-11T20:55:32.077 に答える
1

検索パターンは$"_development"で、行末にある空の文字列とその後に続くリテラルを探します"_development"。行末の後に何かを書くことは不可能です --"_development"$代わりに書くべきです。は$常に最後に行きます。

改行を挿入できるバージョンの sed (GNU sed など) を使用していると仮定すると、次のようなものが機能するはずです。

sed -e 's/"_development"$/\0\n  password: test/' original_file > new_file

\0、一致したパターン全体を使用するように指示し (その部分を削除しないように"_development")、\n改行を挿入します。

于 2012-10-11T17:54:01.983 に答える