2012-03-31 1 views
2

ファイルにキーワード「MYWORD」がある前に行を挿入するsedスクリプトがあります。私のスクリプトは以下の通りです:スクリプト内の複数のファイルに対してsedを使用する

sed -e '/MYWORD/ i\MY NEW LINE TO BE INSERTED' <inputFilename >outputFilename 

これが唯一の方法私は、このインサートは、ディレクトリ内のすべてのファイルで発生持っている私のスクリプトを変更することができます1つのファイルだけに発生しますので?

+0

あなたのサンプルコードは実際には1つのファイルで動作すると言っていますか? – Graham

答えて

1

nosidによると、-iオプションを使用すると、ファイルを適切に編集できます。あなたのオペレーティングシステムのマニュアルページを読んで、-iの使い方を正確に判断してください。

for this in foo*.txt; do 
    sed -i'' -e 'your-sed-script' "$this" 
done 

私は確実にあなたの挿入方法がうまくいくか分からない、あるいは少なくとも、仕事、言った:そして、あなたはファイルを識別し、行動するためにシェルスクリプトの少しでsedをラップすることができます。私はFreeBSDとOS Xでテストしましたが、全く動作しませんでした。行を挿入する私の普通の方法は、代わりにawkを使うことです。したがって、(例えば):

for this in foo*.txt; do 
    awk '/MYWORD/{print "Extra line of text goes here."} 1' "$this" > "$this.$$" 
    mv "$this.$$" "$this" 
done 

awkのラインは、ここでは(基本的な正規表現にsedデフォルトのに対し、拡張正規表現)/ MYWORD /検索します。それが見つかると、最初に「余分な」テキストが印刷されます。次に、 "1"は現在の行も印刷する "true"と評価されます。その効果は、MYWORDの前に行に "余分な"テキストを挿入することです。

スクリプトではないことに注意してください。それは、変更されていないファイルの無駄遣い、配管と名前の変更です。あなたはawkの終了値に応じて一時ファイルを "mv"にするか、cmpを使ってファイルが変更されたかどうかを判断し、残りの一時ファイルなどを消去することで改善できます。 。

関連する問題