sed找到重複的行

2022-03-21 06:12:47 字數 1100 閱讀 4839

sed之僅列印相鄰重複的行

cat file 

aaabbb

bbbccc

dddeee

eeefff

只顯示重複的行:

bbbbbb

eeeeee

sed -n ':a;n;/\

(.\+

\)\n\1/

!d;p' file

[解析]

讀取下一行,如果兩行內容一樣的列印,然後跳轉命令行尾,不執行 d ,如果沒匹配到就 d 刪除第一行,跳轉去命令列首繼續執行。

awk 'i

}' file <

(echo)

以上的例子僅侷限在兩行重複的情況,那麼有多行重複的情況呢?比如:

cat file

aaabbb

bbbbbb

dddeee

eee要得到:

bbbbbb

bbbeee

eeesed -n '$!n;/\

(.*\

)\n\1$/

;x;/\(

.*\)

\n\1$/p;x;

:a;h;d'   file

[解析]

整體的思路是判斷如果是相鄰兩行重複的話,就 p 列印第一行,然後把當前的 pattern space 中,當相鄰行不匹配重複時,x 交換兩個空間的內容,把 hold space 裡的內容(就是上一行的 pattern space裡的內容後拷貝到的 hold space),再匹配看是否兩行重複,如果重複的話就列印。這樣就把連續的相鄰的行列印出來,避免了因為前兩行相同,而第三行和第四行不匹配的話,就無法 列印第三行的內容了。這個思路很值得借鑑。另外該**可以優化為

sed -n '$!n;/\

(.*\

)\n\1$/

;x;/

/p;x;

:a;h;d'  file

//p 就可以省略匹配的內容。

ref:

【awk去重以某列重複的行,多個重複的行中保留乙個】

sed與awk去除重複行

unixf 1 如果僅僅是刪除內容完全一樣重複行 則可以使用sort先進行排序 然後使用 uniq進行刪除重複資料即可 例如 cust.txt txt 130000006800,17,151,01,250100 130000006800,17,151,01,250101 1300001077,17,...

sed與awk去除重複行

1 如果僅僅是刪除內容完全一樣重複行 則可以使用sort先進行排序 然後使用 uniq進行刪除重複資料即可 例如 cust.txt txt 130000006800,17,151,01,250100 130000006800,17,151,01,250101 1300001077,17,151,01...

sed行定位的使用

sed n 2 p file 只列印第1行,不列印其它的行 sed n 1,4 p file 從第1行開始到第4行的記錄 sed n los p file 列印匹配los的行 sed n 4,los p file 列印從第4行到匹配los之間的所有行 sed 1,2 d file 把第一行和第二行全...