如何使用sed
將大文本文件中的兩條特定相鄰行組合成一行?例如,我想將行號爲2001891和2001892的行組合成一行,並將其寫回到同一行位置的文件中(意思是行2001893和下面的行將向上移動)?在大文本文件中使用sed組合2行
我GOOGLE了周圍的教程和手冊sed
但都太神祕,我(那些'2,3p;N;s/jam.l,21/.,lk;dczA[12]blahblah'
意味着什麼?)
如何使用sed
將大文本文件中的兩條特定相鄰行組合成一行?例如,我想將行號爲2001891和2001892的行組合成一行,並將其寫回到同一行位置的文件中(意思是行2001893和下面的行將向上移動)?在大文本文件中使用sed組合2行
我GOOGLE了周圍的教程和手冊sed
但都太神祕,我(那些'2,3p;N;s/jam.l,21/.,lk;dczA[12]blahblah'
意味着什麼?)
我不是sed
大師,但我想你想:(。上運行它重要的數據,當然之前嘗試沒有-i
上的測試文件)
sed -i '2001891N;s/\n//' filename
$ cat a.dat
1
2
3
4
$ sed '2N;s/\n//' a.dat
1
23
4
我試過了更簡單的sed '2001891s/\n//'
,但當模式爲\n
時,它不起作用。對於任何其他模式(例如sed '2001891s/a//'
),它似乎工作。對於我來說,想想更多的時間已經太晚了,但我希望其中一位sed
大師會用我簡單的sed
命令解釋一下怎麼回事。
爲了解釋這裏發生了什麼:'2001891'是'address';它告訴'sed'只能在符合這種模式的行上操作。 'N'告訴sed將下一行追加到'模式空間'(即它當前正在處理的文本)中。 ';'開始一個新的命令,最後'/ \ n //'去掉換行符。 – 2010-01-07 03:44:53
是的,我要添加一個解釋,但你在我之前做過。謝謝! – 2010-01-07 03:45:58
'sed'的''''''''和'y'命令在模式(或保持)空間的末尾沒有看到換行符(只有在結束符之前出現的換行符)。 – 2010-01-07 06:43:36
$ awk 'NR==2001891{printf $0;getline;print;next}1' file > temp;mv temp file
OR
$ awk '{printf (NR==2001891)?$0:$0"\n"}' file > temp;mv temp file
我相信你能做到一些使用cat的簡單魔法,文件重定向和nl命令。
不,你不能。 – 2010-01-07 06:36:00
是什麼讓你如此確定? – 2010-01-07 14:43:58
「有些人在遇到Unix問題時,想'我知道,我會用sed',現在他們有兩個問題。」 - Unix-Haters手冊http://simson.net/ref/ugh .pdf – 2010-01-07 03:28:38