1. 程式人生 > 其它 >管道命令(sort、uniq、tr、cut、eval命令)

管道命令(sort、uniq、tr、cut、eval命令)

目錄

一、sort命令

1、作用

  • 以行為單位對檔案內容進行排序
  • 也可以根據不同的資料型別來排序

2、語法格式

sort [選項] 引數
 
cat file | sort 選項

3、常用選項

-f∶ 忽略大小寫,會將小寫字母都轉換為大寫字母來進行比較;
-b∶ 忽略每行前面的空格;
-n∶ 按照數字進行排序;
-r∶ 反向排序;
-u∶ 等同於uniq,表示相同的資料僅顯示一行;
-t∶ 指定欄位分隔符,預設使用 【Tab】鍵分隔;
-k∶指定排序欄位;
-o <輸出檔案>∶ 將排序後的結果轉存至指定檔案;

4、例項操作

4.1 對數字進行排序:按照第一列數字順序進行排序,而不是按照數字大小

4.2 對字母進行排序:預設是按照首字母進行排序,且小寫字母放前面,大寫字母放後面

4.3 -f:忽略大小寫,會將小寫字母都轉換為大寫字母來進行比較

4.4 sort -n:按照數字進行排序;sort -r:反向排序

4.5 sort -u∶ 等同於uniq,表示相同的資料僅顯示一行;去除重複的

4.6 按照/etc/passwd內的UID進行從大到小反向排序,並將排序結果輸出到123.txt檔案中

sort -t ':' -k3 -nr /etc/passwd -o 123.txt
 
cat /etc/passwd | sort -t ':' -nr -o 123.txt

-t∶ 指定欄位分隔符,預設使用 【Tab】鍵分隔;-k∶指定排序欄位;-o <輸出檔案>∶ 將排序後的結果轉存至指定檔案

4.7 對/var/log目錄下的檔案所佔磁碟大小進行降序排列,並將排序結果輸出到456.txt檔案中

	
du -a /var/log | sort -nr -o 456.txt

二、uniq命令

1、概述

  • uniq 命令用於檢查及刪除文字檔案中重複出現的行列,一般與 sort 命令結合使用

2、語法格式

uniq [選項] 引數
cat file | uniq 選項

3、常用選項

  • -c∶ 進行計數,並刪除檔案中重複出現的行;
  • -d∶ 僅顯示連續的重複行;
  • -u∶ 僅顯示出現一次的行;

4、例項操作

4.1 去除重複內容,uniq+檔名


 

4.2 uniq 結合sort -n 使用,去除重複項,並進行升序排列

sort -nu testfile3
sort -n testfile3 |uniq


  

4.3 uniq -c∶ 進行計數,並刪除檔案中重複出現的行;

sort -n testfile3 |uniq -c


   

4.4 uniq-d∶ 僅顯示連續的重複行;

cat testfile3 | uniq -d
uniq -d testfile3
sort -n testfile3 | uniq -d


 

4.5 sort -u∶ 僅顯示出現一次的行

cat testfile3 | uniq -u
uniq -u testfile3
sort -n testfile3 | uniq -u


 

三、tr命令

1、作用

常用來對來自標準輸入的字元進行替換、壓縮和刪除

2、語法格式

tr [選項]  引數

3、常用選項

  • -c∶保留字符集1的字元,其他的字元(也包括換行符\n)用字符集2替換
  • -d∶ 刪除所有屬於字符集1的字元
  • -s∶ 將重複出現的字串壓縮為一個字串;用字符集2替換 字符集1
  • -t∶ 字符集2 替換 字符集1,不加選項和結果

4、引數

  • 字符集1:指定要轉換或刪除的原字符集,當執行轉換操作時,必須使用引數“字符集2”指定轉換的目標字符集,但是執行刪除操作時,不需要引數“字符集2”;
  • 字符集2:指定要轉換成的目標字符集

5、例項操作

5.1 替換字元

5.2 tr-c∶保留字符集1的字元,其他的字元(也包括換行符\n)用字符集2替換

echo -e "abc\n123" | tr -c "a\n" "d"
echo -e "abc\n123" | tr -c "a" "d"


 

5.3 tr -d∶ 刪除所有屬於字符集1的字元

echo fdfgggggggggggggg | tr -d "g"


  

5.4 tr -s∶ 將重複出現的字串壓縮為一個字串;用字符集2替換字符集1

echo fffffffffffdfgggggggggggggg | tr -s "fg"
echo fffffffffffdfgggggggggggggg | tr -s "fg" "a"
echo fffffffffffdfgggggggggggggg | tr -s "fg" "as"


 

刪除空行以及壓縮空行(多種方法cat uniq)

grep -v "^$" tset3
cat tset3 | tr -s "\n"
 
cat -s tset3
uniq tset3


 

5.5 tr應用:解決從windows傳來的檔案的空格問題

Linux中遇到換行符("\n")會進行回車+換行的操作,回車符反而只會作為控制字元("^M")顯示,不發生回車的操作。而windows中要回車符 +換行符("\r\n")才會回車+換行,缺少一個控制符或者順序不對都不能正確的另起一行

如果文字檔案是在windows下建立或文字格式被設定為dos,有時我們會看到一些 ^M符號,其實它就相當於 \r,只是不同的檔案格式的轉義字元也有所不同。

cat -v 可以讓隱藏的轉移字元也列印中顯示

5.5.1 使用tr替換換行符

cat -v test3.txt

cat test3.txt | tr "\r" "\n" >test4.txt

![img]
 

5.5.2 使用 dos2unix +檔名,進行直接轉換格式


 

四、cut命令

1、作用

顯示行中的指定部分,刪除檔案中指定欄位

  • cut 命令從檔案的每一行剪下位元組、字元和欄位並將這些位元組、字元和欄位寫至標準輸出。
  • 如果不指定 File 引數,cut 命令將讀取標準輸入。必須指定 -b、-c 或 -f 標誌之一。

2、格式

cut [選項]  引數   

3、常用選項

  • -f∶ 通過指定哪一個欄位進行提取。cut命令使用"TAB"作為預設的欄位分隔符。
  • -d∶ “TAB"是預設的分隔符,使用此選項可以更改為其他的分隔符。
  • - -complement∶ 此選項用於排除所指定的欄位。
  • - -output-delimiter∶ 更改輸出內容的分隔符。
  • -b :以位元組為單位進行分割。這些位元組位置將忽略多位元組字元邊界,除非也指定了 -n 標誌

4、例項操作

4.1 -d∶ “TAB"是預設的分隔符,使用此選項可以更改為其他的分隔符;-f∶ 通過指定哪一個欄位進行提取

4.2 - -complement∶ 此選項用於排除所指定的欄位


  

4.3 - -output-delimiter∶ 更改輸出內容的分隔符

五、eval命令

命令加上eval時,shell會執行命令之前掃描兩次。eval命令將首先會先掃描命令列進行所有命令適用於那些一次掃描無法實現其功能的變數。該命令對變數進行兩次掃描。

1、例項操作