打开高效文本编辑之门_Linux Sed模拟常见文件命令
? ? ? ? ? ? ? ? ? ? ? ? ? ?Linux sed 實現grep cat wc tail命令的效果對比案例
聲明與簡介
sed:Stream Editor文本流編輯器,sed是一個“非交互式的”面向字符流的編輯器。本文以案例來介紹如何使用sed來達到其它linux文件命令的效果,或者說如何用sed來模擬其它命令。眾所周知在linux環境下,我們會接觸很多文件處理的命令,如grep、cat、head、tail、wc等,那么功能強大的文件流編輯器sed能否實現這些功能呢?閱讀下文,逐個給大家來揭曉。
注: 1 至少有一臺linux環境,當前驗證環境是Centos 8。
? ? ? ? 2 了解常見的linux腳本的寫法,能認識或者常用單詞的縮寫。
? ? ? ? 3 本文會根據實際實踐更新和修正,歡迎批評、指導
數據說明
如下是使用的示例文本數據,這里的行號是為了方便解釋結果,不是文本內容。
1 7369,smith,clerk,7902,'1980-12-17',800,null,20 2 7499,allen,salesman,7698,'1981-2-20',1600,300,30 3 7521,ward,salesman,7698,'1981-2-22',1250,500,30 4 7566,jones,manager,7839,'1981-4-2',2975,null,20 5 7654,martin,salesman,7698,'1981-9-28',1250,1400,30 6 7655,jack,manager,7698,'1987-3-28',1600,1800,10 7 7656,tim,clerk,7902,'1982-12-12',1400,1400,30 8 7657,kate,clerk,7902,'1989-11-11',1400,1800,10 9 7698,blake,manager,7839,'1981-5-1',2850,null,30 10 7699,dlake,salesman,7839,'1983-6-15',3000,null,10 11 7782,clark,manager,7839,'1981-1-9',2450,null,10 12 7788,scott,analyst,7566,'1982-12-9,3000,null,20 13 7839,king,president,null,'1981-11-17',5000,null,10 14 7844,turner,salesman,7698,'1981-12-8',1500,0,30 15 7876,adams,clerk,7788,'1983-1-12',1100,null,20 16 7900,james,clerk,7698,'1981-12-3',950,null,30 17 18 --7902,ford,analyst,7566,'1981-12-3',3000,null,20 19 20 7934,miller,clerk,7782,'1982-1-23',1300,null,10cat命令
Linux的cat命令是對文件的讀取,即可以查看文件的內容。這里sed可以通過p命令,結合-n來查看內容。
讀取文本內容
# 查看文本emp.txt的內容。 sed -n 'p' emp.txt# cat命令查看文件所有內容 cat emp.txt# 結果(部分數據) 7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30 7521,ward,salesman,7698,'1981-2-22',1250,500,30 7566,jones,manager,7839,'1981-4-2',2975,null,20grep命令
Linux的grep命令是對文件的關鍵字匹配,即可以通過特定的關鍵字來匹配到指定的行。這里sed可以通過p命令”/、/”結合-n或者通過s命令匹配達到同樣的效果。
關鍵字匹配
# 1 匹配emp.txt里含scott的行的內容。 grep scott emp.txt#結果 7788,scott,analyst,7566,'1982-12-9',3000,null,20# way1 通過p直接匹配關鍵字scott sed -n '/scott/p' emp.txt # 結果 7788,scott,analyst,7566,'1982-12-9',3000,null,20# way2 通過p、s、$方式匹配關鍵字scott sed -n 's/scott/$/p' emp.txt # 結果 7788,$,analyst,7566,'1982-12-9',3000,null,20#注:S這種方式需要加上$,意思為匹配到每行的結束。反向關鍵字匹配
# 2匹配emp.txt里不含scott的行的內容。。 grep -v scott emp.txt# 在sed里僅需要在正向匹配時的p命令前加個!(反向的意思)。 sed -n '/scott/!p' emp.txthead命令
Linux的haed命令是對文件的排名靠前的行進行匹配,即可以通過指定行號N來查看前N行的內容。這里sed可以通過p命令首尾行號或者通過q命令或者d命令達到同樣的效果。
顯示文件前面N行
# 1只顯示文件的前4行,通過head加行號4來達到目的。 head -4 emp.txt# Sed方式實現可p(打印)、q(退出)、d(刪除)命令來實現同樣的效果 # Way1 通過結合p結合行首、尾來實現該效果。 sed -n '1,4 p' emp.txt# 執行結果 7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30 7521,ward,salesman,7698,'1981-2-22',1250,500,30 7566,jones,manager,7839,'1981-4-2',2975,null,20# Way2 通過結合q結合行號來實現。 sed '4 q' emp.txt# Way3 通過行號結合d來實現 sed '5,$ d' emp.txt#注: 這里的行號是要保留的行加1,因為刪除是從要保留的行的下一行開始。tail命令
Linux的tail命令是對文件的排名靠后的行進行匹配,即可以通過指定行號N來從查看后N行的內容。這里sed可以通過p命令首尾行號或者通過q命令或者d命令達到同樣的效果。
顯示文件后面N行
# 通過tail命令,這里指定行數為5 tail -5 emp.txt# Way1 sed通過p結合行范圍,這里起始位置為總行數-要保留的行數+1,即20-5+1=16。 sed -n '16,$ p' emp.txt7900,james,clerk,7698,'1981-12-3',950,null,30--7902,ford,analyst,7566,'1981-12-3',3000,null,207934,miller,clerk,7782,'1982-1-23',1300,null,10# Way 2 同理,我們也可以通過d命令實現類似的效果,注意這里的末尾是總行號-要保留的行號。即20-5=15。 sed '1,15 d' emp.txtwc命令
wc(Word Count)命令的功能為統計指定文件中的字節數、字數、行數,并將統計結果顯示輸出。
顯示文件總行數
# 提供wc命令查看文件行號 wc -l emp.txt #結果 20 emp.txt#不想顯示文件名則通過cat文件再結合管道來實現 cat emp.txt | wc –l#結果 20#sed命令結合=、$也能達到查看文件總行號的效果 sed -n '$ =' emp.txt # 結果 20總結
以上是生活随笔為你收集整理的打开高效文本编辑之门_Linux Sed模拟常见文件命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打开高效文本编辑之门_熟悉Linux S
- 下一篇: 《后浪》任新正每次都会弄个手势,这个手势