2017-07-14 7 views
0

マッチの後最初の空行を見つけてテキストに置き換えようとしています。私は、追加の著者と新しい行を追加するSEDたいマッチして置き換えた後に最初の空行を見つけるためにsed

Authors 
----- 
author1 
author2 
author3 
... 
authorN 

----- 

Authors 
----- 
author1 
author2 
author3 
... 
authorN 
authorAdded 

----- 

これらのパターンは、ファイル・データベース間で可変の長さと場所です例えば、パターンは、作者場合でした。

+0

このようなブロックは複数ありますか? https://stackoverflow.com/questions/38972736/how-to-select-lines-between-two-patternsはあなたを始めます...あなたは[{}グルーピング(https://www.gnu.org) /software/sed/manual/sed.html#Common-コマンド)一致するアドレスでのみコマンドを実行する – Sundeep

答えて

0

私はawkここにあなたの最善の策だと思う:

$ cat test.txt 
Count 
----- 
1 
2 
3 
4 
5 

----- 

$ awk '{ if ($1=="") { print last+1; last=last+1; print ""; } else { print; last=$1 } }' test.txt 
Count 
----- 
1 
2 
3 
4 
5 
6 

----- 
+0

これは参考になりますが、これらのファイルはかなり大きいので、可能であれば、インプレース編集をストリーミングする方がよいでしょう。この例を編集して、私が何をしようとしているのかをさらに示しました。 – John

+0

OK - もしあなたが 'Author5'を持っていたら' Author6'を追加したいのですか?そしてあなたが 'Zimbabwe442'を持っていれば、あなたはZimbabwe443'を追加したいですか? – Jack

+0

いいえ、リストはファイルごとに異なるので、John、Shannon、Jackの場合もありますが、毎回Jaredを追加したいと思います。ですから、著者の数が変わるたびに同じ文字列を追加したいのです。 – John

0

これは(GNUのSED)あなたのために働くかもしれない:いつものようにAuthorsで始まるもの、他の

sed '/^Authors/!b;:a;n;/./ba;inew author' file 

印刷ラインを。その後、通常通り空でない行を出力し、最初の空行に必要な文字列を挿入します。 N.B.空の行も印刷されます

関連する問題