2017-04-24 7 views
0

パターンの前の各行の最後にセミコロンを追加したいと思います。 は例えば、私は次のテキストがあります。sed:パターンの前にある各行の最後に何かを追加してください

INSERT INTO line 1 
INSERT INTO line 2 
line 3 
line 4 
line 5 
INSERT INTO line 6 

そして、私はこれがしたい:

INSERT INTO line 1; 
INSERT INTO line 2 
line 3 
line 4 
line 5; 
INSERT INTO line 6; 

を私が最初のsedコマンドを使用:

sed -i '/^INSERT/ s/$/;/' 

をしかし、問題はあります2行目の最後にはセミコロンを、5行目にはセミコロンを付けません。 各行の最後にこれを自動的に行う解決策は何でしょうか?このようなサンプルが何千もあるファイルにINSERT INTOを挿入しますか?

ありがとうございました!

+1

あなた 'sed'バージョンは何ですか?それは '-z'オプションを持っていますか? 'sed -z 's/\ nINSERT /;&/ g''は入力ファイルが大きすぎる場合には適していませんが、最も単純なロジックです。 – Sundeep

+0

セミコロンと呼ばれます。 – user31264

+0

ありがとうuser31264私はそれを訂正しました。 素晴らしい@Sundeepは動作します!私はバージョン4.2.2を持っており、およそ477 MBのファイルで動作しました。 300kライン。 – LaPalme

答えて

1

1ストアファイルにテキスト:
cat data.txt
結果:

INSERT INTO line 1 
INSERT INTO line 2 
line 3 
line 4 
line 5 
INSERT INTO line 6 

2はAWKスクリプトコンテンツがある:
cat awk.script
結果:

{ 
if (NR==1) {lastline=$0;} 
if (NR>1 && $1 == "INSERT") {print lastline";";lastline=$0;} 
if (NR>1 && $1 != "INSERT") {print lastline;lastline=$0;} 
} 
END{if(lastline ~ /INSERT/) print lastline";";else print lastline; } 

3実行awkコマンド:
awk -f awk.script data.txt
結果:

INSERT INTO line 1; 
INSERT INTO line 2 
line 3 
line 4 
line 5; 
INSERT INTO line 6; 
関連する問題