2017-04-24 45 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''將是最簡單的邏輯imo,但如果輸入文件太大,則不適合。 – 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;