教你Linux uniq新玩法
如果您經(jīng)常用Linux處理和編輯文本文件、字符串等,那么您應(yīng)該已經(jīng)非常熟悉uniq命令了,因?yàn)樗窃擃I(lǐng)域中使用最多的命令。
對(duì)于不熟悉uniq命令的人來說,它就是一個(gè)命令行工具,用于打印或省略重復(fù)的行。這基本上是從輸入中過濾相鄰的匹配行,然后寫入輸出。如果沒有選項(xiàng),則將匹配的行合并到第一個(gè)出現(xiàn)的行。
下面是使用uniq命令的幾個(gè)例子。
舉一些栗子
忽略重復(fù)項(xiàng)
在不指定任何參數(shù)的情況下執(zhí)行uniq命令只會(huì)忽略重復(fù)的內(nèi)容并顯示惟一的字符串輸出。
foo@bar:~/Documents/files$cat file1 HelloHello How are you? How are you? Thank you Thank you foo@bar:~/Documents/files$ uniq file1 Hello How are you? Thank you
顯示重復(fù)的行數(shù)
使用-c參數(shù),可以查看文件中的重復(fù)行數(shù)
foo@bar:~/Documents/files$ cat file1 Hello Hello How are you? How are you? Thank you Thank you foor@bar:~/Documents/files$ uniq -c file12 Hello 2 How are you? 2 Thank you
僅輸出有重復(fù)的行
通過使用-d參數(shù),我們可以只選擇文件中重復(fù)的行
foo@bar:~/Documents/files$ cat file1 Hello Hello Good morning How are you? How are you? Thank you Thank you Bye foo@bar:~/Documents/files$ uniq -d file1 Hello How are you? Thank you
比較時(shí)忽略大小寫
通常,當(dāng)您使用uniq命令時(shí),它會(huì)考慮字母的情況。但是如果你想忽略這種情況,你可以使用-i參數(shù)
foo@bar:~/Documents/files$ cat file1 Hello hello How are you? How are you? Thank you thank you foo@bar:~/Documents/files$ uniq file1 Hello hello How are you? Thank you thank you foo@bar:~/Documents/files$ uniq -i file1 Hello How are you? Thank you
只打印唯一行
如果只想查看文件中的唯一行,可以使用-u參數(shù)
foo@bar:~/Documents/files$ cat file1 Hello Hello Good morning How are you? How are you? Thank you Thank you Bye foo@bar:~/Documents/files$ uniq -u file1 Good morning Bye
對(duì)重復(fù)項(xiàng)進(jìn)行排序和查找
有時(shí),重復(fù)的條目可能包含在文件的不同位置。在這種情況下,如果我們簡(jiǎn)單地使用uniq命令,它將不會(huì)在不同的行中檢測(cè)到這些重復(fù)的條目。在這種情況下,我們首先需要將文件排序,然后找到重復(fù)項(xiàng)。
foo@bar:~/Documents/files$ cat file1 Adam Sara Frank John Ann Matt Harry Ann Frank John foo@bar:~/Documents/files$ sort file1 | uniq -c1 Adam 2 Ann 2 Frank 1 Harry 2 John 1 Matt 1 Sara
將輸出保存到文件中
我們的uniq命令的輸出可以簡(jiǎn)單地保存在另一個(gè)文件中,如下所示
foo@bar:~/Documents/files$ cat file1 Hello Hello How are you? Good morning Good morning Thank you foo@bar:~/Documents/files$ uniq -u file1 How are you? Thank you foo@bar:~/Documents/files$ uniq -u file1 outputfoo@bar:~/Documents/files$ cat output How are you? Thank you
忽略開頭N個(gè)字符
為了在開始時(shí)忽略幾個(gè)字符,可以使用-s參數(shù),但是需要指定需要忽略的字符數(shù)
foo@bar:~/Documents/files$ cat file1 1apple 2apple 3pears 4banana 5banana foo@bar:~/Documents/files$ uniq -s 1 file1 1apple 3pears 4banana
寫在最后
好吧,這些都是過時(shí)的技術(shù)、過時(shí)的選擇和幾十年的程序!
但是,每天分散在我們命令行中,您都會(huì)無休止地執(zhí)行管理員命令。
它是Linux系統(tǒng)的基石,也是經(jīng)典的口碑,值得我們學(xué)習(xí)!
Happy coding :)