Liunx 中sed、grep、cut命令

Linux下一切皆文件,對Linux的操作就是對文件的處理。

把最近學習的liunx命令做一個總結,方便複習使用。

目錄
一、grep 按關鍵字過濾文件行
二、cut 列截取工具
三、sed 刪除文件,替換文件中的內容
四、sort 排序,sort -u 2.txt、去除文件的重複行
五、tee
六.diff 逐行比較文件的不同
七、paste 合併文件行
八、tr 替換刪除文件中的字符

一、grep

grep是過濾工具,用於根據關鍵字進行行過濾

1、語法:

grep [選項] '關鍵字' 文件名

2、常見選項:

-i: 不區分大小寫
-v: 查找不包含指定內容的行,反向選擇
-w: 按單詞搜索
-o: 打印匹配關鍵字
-c: 統計匹配到的行數
-n: 顯示行號
-r: 逐層遍歷目錄查找
-A: 顯示匹配行及後面多少行 
-B: 顯示匹配行及前面多少行
-C: 顯示匹配行前後多少行
-l:只列出匹配的文件名
-L:列出不匹配的文件名
-e: 使用正則匹配
-E:使用擴展正則匹配
^key:以關鍵字開頭
key$:以關鍵字結尾
^$:匹配空行

3、常見的案例使用

# grep -i root passwd                       忽略大小寫匹配包含root的行
# grep -w ftp passwd                        精確匹配ftp單詞
# grep -w hello passwd                      精確匹配hello單詞;自己添加包含hello的行到文件
# grep -wo ftp passwd                       打印匹配到的關鍵字ftp
# grep -n root passwd                       打印匹配到root關鍵字的行號
# grep -ni root passwd                      忽略大小寫匹配統計包含關鍵字root的行
# grep -nic root passwd                     忽略大小寫匹配統計包含關鍵字root的行數
# grep -i ^root passwd                      忽略大小寫匹配以root開頭的行
# grep bash$ passwd                             匹配以bash結尾的行
# grep -n ^$ passwd                             匹配空行並打印行號
# grep ^# /etc/vsftpd/vsftpd.conf       匹配以#號開頭的行
# grep -v ^# /etc/vsftpd/vsftpd.conf    匹配不以#號開頭的行
# grep -A 5 mail passwd                     匹配包含mail關鍵字及其後5行
# grep -B 5 mail passwd                     匹配包含mail關鍵字及其前5行
# grep -C 5 mail passwd                     匹配包含mail關鍵字及其前後5行

二、 cut

cut是截取工具,用於列的截取

1、語法

# cut 選項  文件名

2、常見選項

-c: 以字符爲單位進行分割,截取
-d: 自定義分隔符,默認爲製表符\t
-f: 與-d一起使用,指定截取哪個區域

3、常見的案例使用

# cut -d: -f1 1.txt             以:冒號分割,截取第1列內容
# cut -d: -f1,6,7 1.txt     以:冒號分割,截取第1,6,7列內容
# cut -c4 1.txt                 截取文件中每行第4個字符
# cut -c1-4 1.txt           截取文件中每行的1-4個字符
# cut -c4-10 1.txt          截取文件中每行的4-10個字符
# cut -c5- 1.txt                從第5個字符開始截取後面所有字符
cut -c1-4 passed.txt    #截取文件中每行的1-4個字符

三、sed

關於sed命令的使用,大家可以搜索網上相關文章,這裏只列舉了部分我工作中常用的用法。

1、常見的案例使用

sed -i '1d' filename     #刪除文件第一行,-i會直接修改原文件內容
sed -i 'nd' filename      #刪除文件第n行
sed -i '$d'       #刪除文件最後一行
sed -i '1,5d' filename      #刪除文件第1到5五行
sed -i '10,$d' filename     # 刪除文件第10到最後一行
sed  -i 's/原字符串/替換字符串/' filename   #替換文件中的內容
sed -i 's/sbin/sbin1204/g' passwd        #將文件所有sbin替換成sbin1204
sed -i '1,5s/sbin/sbin1204/g' passwd    ##將文件前五行中的sbin替換成sbin1204

四、sort

sort工具用於排序,它將文件的每一行作爲一個單位,從首字符向後,依次按ASCII碼值進行比較,最後將他們按升序輸出。

1、語法和選項

-u :去除重複行
-r :降序排列,默認是升序
-o : 將排序結果輸出到文件中,類似重定向符號>
-n :以數字排序,默認是按字符排序
-t :分隔符
-k :第N列
-b :忽略前導空格。
-R :隨機排序,每次運行的結果均不同

2、常見的案例使用

# sort -n -t: -k3 1.txt             按照用戶的uid進行升序排列
# sort -nr -t: -k3 1.txt            按照用戶的uid進行降序排列
# sort -n 2.txt                         按照數字排序
# sort -nu 2.txt                        按照數字排序並且去重
# sort -nr 2.txt 
# sort -nru 2.txt 
# sort -nru 2.txt 
# sort -n 2.txt -o 3.txt            按照數字排序並將結果重定向到文件
# sort -R 2.txt 
# sort -u 2.txt 

五、tee

tee工具是從標準輸入讀取並寫入到標準輸出和文件,即:雙向覆蓋重定向(屏幕輸出|文本輸入)

1、常見的案例使用

echo hello world|tee file1    # 屏幕打印hello world,並將hello world寫入到文件file1
# cat file1 
echo 999|tee -a file1    # 屏幕打印999,並將999追加到文件file1
grep -v '^#' passed.txt | grep -v '^$' |tree test1202.txt

六.diff

diff工具用於逐行比較文件的不同
注意:diff描述兩個文件不同的方式是告訴我們怎樣改變第一個文件之後與第二個文件匹配
1、語法

diff [選項] 文件1 文件2

2、常用選項

-b  不檢查空格   
-B  不檢查空白行  
-i  不檢查大小寫  
-w  忽略所有的空格 
--normal    正常格式顯示(默認)  
-c  上下文格式顯示 
-u  合併格式顯示

七、paste

paste工具用於合併文件行

1、常用選項

-d:自定義間隔符,默認是tab
-s:串行處理,非並行

2、常見的案例使用

paste file1 file2  #file1 file2按行合併,分隔符是tab
paste -d: file1 file2  #file1 file2按行合併,分隔符是冒號
paste -s file1 file2
paste -s -d: file1 file2

八、tr

tr用於字符轉換,替換和刪除;主要用於刪除文件中控制字符或進行字符轉換。tr工具是一對一替換,是將匹配中的字符替換爲另外一個字符。

1、常用選項

-d 刪除字符串1中所有輸入字符。
-s 刪除所有重複出現字符序列,只保留第一個;即將重複出現字符串壓縮爲一個字符串
用法1:命令的執行結果交給tr處理,其中string1用於查詢,string2用於轉換處理
commands|tr  'string1'  'string2'  #將string1替換爲string2,兩個程序之間用管道連接起來

=======================================
用法2:tr處理的內容來自文件,記住要使用"<"標準輸入
 tr  'string1'  'string2' < filename  #將文件的內容作爲標準輸入交給tr處理

=======================================
用法3:匹配string1進行相應操作,如刪除操作
 tr [options] 'string1' < filename

2、常見的案例使用

tr 'a-z' 'A-Z' <passed.txt 
tr ':/' '#' <passed.txt |head
tr '0-9' '@' <passed.txt |head
tr -d 'a-z' < passed.txt   #刪除文件中的小寫字母,不會修改原文件呢內容
tr -d ':/ 0-9' < passed.txt  #刪除文件中的數字,空格及:和/、

自己現在寫文章越來越不用心了,總覺得太忙,要把所有時間用在學習上,多總結多寫文章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章