2017-08-07 14 views
1

とコメントしている行はすべて無視してください。パターンマッチの後に行を挿入し、sedを使用してBashシェルのコメント行(「#」で始まります)ここでSed、パターンマッチの後に行を挿入し、#

は一例です:pattern後に新しい行を挿入:

入力ファイル:

foo 
Art 
street 
#pattern 
foo 
pattern 
color 

出力:

foo 
Art 
street 
#pattern 
foo 
pattern 
NEW LINE HERE 
color 

答えて

0

awkの使用:

sed
awk -v line='NEW LINE HERE' -v pat='pattern' '1; $0 ~ pat && !/^[ \t]*#/{print line}' file 

foo 
Art 
street 
#pattern 
foo 
pattern 
NEW LINE HERE 
color 
+0

@Khalid:これはうまくいったのですか? – anubhava

2

$ cat file 
foo 
Art 
street 
#pattern 
foo 
pattern 
color 

$ sed '/^[^#]*pattern/ a NEW LINE HERE' file 
foo 
Art 
street 
#pattern 
foo 
pattern 
NEW LINE HERE 
color 
+1

'#'行をスキップするために 'n'を使うこともできます:' '/ ^#/ n;/pattern/a ...'これは、コメント行をスキップする必要がある数多くの正規表現がある場合に役に立ちます。 'n 'でコメントをスキップすると、残りの正規表現はコメントを心配する必要はありません。 – stevesliva

+0

それは賢明な改善だろう。フィードバックをお寄せいただきありがとうございます! – archemiro

1

があまりにも一度、以下試してください。 sedを有する

awk '/pattern/ && !/#/{print $0 ORS "NEW LINE HERE";next} 1' Input_file 
1

別のアプローチ:

sed 's/^pattern.*/&\nNEW LINE HERE/' file 

改行(\n)と目的の文字列が続く整合ライン(&)とpatternで始まる行を交換してください。

+1

非常に単純でわかりやすい++。唯一の欠点は、パターンが行頭にある場合にのみ機能するということです。そうですか? – archemiro

+0

あなたはそうです。アンカーはあなたのパターン '^ [^#] *'で置き換えることができます。 – SLePort

関連する問題