打开高效文本编辑之门_Linux Sed插入追加转换退出等命令应用
生活随笔
收集整理的這篇文章主要介紹了
打开高效文本编辑之门_Linux Sed插入追加转换退出等命令应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? ? ? ? ? ? ? ? ? ? ?Linux sed 追加轉換退出更新修改轉換命令使用案例
聲明與簡介
sed:Stream Editor文本流編輯,sed是一個“非交互式的”面向字符流的編輯器。
sed其它命令匯總主要涉及i(insert)插入、a(append)追加、c(change)更新、l隱藏字符、=等號、q(quit)退出執行、y轉換、r(read)讀等命令。命令的詳細使用說明見下文。
本文主要以實際的數據來介紹sed的substitude(替換)即s命令的使用。
數據說明
如下是使用的示例文本數據,這里的行號是為了方便解釋結果,不是文本內容。
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,scott 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,10插入命令
在某行前插入
# 1在第2行前插入一行新的內容。 sed '2 i well new content' emp.txt# 結果 7369,smith,clerk,7902,'1980-12-17',800,null,20 well new content 7499,allen,salesman,7698,'1981-2-20',1600,300,30#注:1 這里也支持插入\n即換行符。 #? ? 2 這里的i即是insert。追加命令
在某行后插入
# 1 在第2行后插入一行新的內容。。 sed '2 a well new content\n' emp.txt# 部分數據,最后有個換行符。 7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30 well new content#注:1 這里的a即是append。在文末插入內容
# 2 在文件的最后一行追加一行內容,插入類似(換成i)sed '$ a well new content\n' emp.txt#注: 在文件第一行插入不可以用^匹配,可以用如下命令(指定行號為1):sed '1 i well new content\n' emp.txt插入多行記錄
# 3 在第一行前兩行內容。這里也可以是i,即在行號前插入。 sed '1 a well new content\ line2' emp.txt# 注: 這里需要換行輸入,而不能合并成一行。更新命令
對應行更新
# 1 對指第2行做內容的更新 sed '2 c well new content' emp.txt # 結果 7369,smith,clerk,7902,'1980-12-17',800,null,20 well new content#注:更新命令一般是結合-i命令(修改源文件章節)一起使用。匹配關鍵字行更新
# 2 匹配到scott關鍵字并將該行用新的內容更新。 sed '/scott/ c well new content' emp.txt# 數據,未顯示全部 7782,clark,manager,7839,'1981-1-9',2450,null,10 well new content 7839,king,president,null,'1981-11-17',5000,null,10# 原始數據 7782,clark,manager,7839,'1981-1-9',2450,null,10 7788,scott,analyst,7566,'1982-12-9,3000,null,20,scott 7839,king,president,null,'1981-11-17',5000,null,10插入追加更新結合使用
# 3 對匹配到scott的行同時實施插入、追加、更新操作。 sed '/scott/{ a\ append record i\ insert record c\ chang record }' emp.txt修改源文件
直接修改源文件
# 1 用關鍵字TTOCC替換scott并直接作用原始文件emp.txt sed -i 's/scott/TTOCC/' emp.txt# 查看文件是否已更新 cat emp.txt | grep TTOCC# 可見emp.txt內容已經更新 7788,TTOCC,analyst,7566,'1982-12-9',3000,null,20等寬度截斷
# 2 該方式是對隱藏字符的擴展,即對每行按照指定的長度(20個)進行截取,以“\”顯示,行內容長度不足的以$顯示。 sed -n 'l 20' emp.txt# 示例數據 7369,smith,clerk,79\ 02,'1980-12-17',800\ ,null,20$ 7499,allen,salesman\ ,7698,'1981-2-20',1\ 600,300,30$#原始數據(部分) 7369,smith,clerk,7902,'1980-12-17',800,null,20 7499,allen,salesman,7698,'1981-2-20',1600,300,30等于命令
打印行號
# 打印文件內容的行號,注意行號每行占一行。 sed = emp.txt#結果,( 示例數據) 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指定范圍打印行號
#僅僅對第3和5行打印行號,其它的行不做處理(正常顯示文件內容)。 sed '3,5 =' emp.txt# 結果,(示例數據) 7369,smith,clerk,7902,'1980-12-17',800,null,20 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 7655,jack,manager,7698,'1987-3-28',1600,1800,10匹配到關鍵字的行打印行號
#匹配到關鍵字”scott”的行打印行號,其它的行不做處理(正常顯示文件內容)。 sed '/scott/ =' emp.txt# 結果,(示例數據) 7782,clark,manager,7839,'1981-1-9',2450,null,10 12 7788,scott,analyst,7566,'1982-12-9,3000,null,20,scott 7839,king,president,null,'1981-11-17',5000,null,10打印文件總行數
#結合打印行號和之前sed的相關功能,不能發現可通過$結合=計算出文件的總行數。 sed -n '$ =' emp.txt#結果 20轉換命令
字符轉換
#這里的y命令相當于對字符進行對應的轉換,比如這里的s轉成D、s轉出V。這里類似translate函數。 sed 'y/sc/DV/' emp.txt# 結果,轉換后的示例數據 7788,DVott,analyDt,7566,'1982-12-9,3000,null,20,DVott#原始數據里是scott 7788,scott,analyst,7566,'1982-12-9,3000,null,20,scott多文件操作命令
多文件一起執行
# 同時匹配兩個文件里的manager關鍵字。 sed -n '/manager/p' employee.txt emp.txt退出執行命令
顯示文件第一行退出
# 通過q命令只顯示文件的第一行,即只到第1行就退出了執行。 sed 'q' emp.txt#結果 7566,jones,manager,7839,'1981-4-2',2975,null,20# head命令對比 head -1 emp.txt#結果 7566,jones,manager,7839,'1981-4-2',2975,null,20#當然也可以通過P命令顯示第一行 sed -n '1 p' emp.txt執行到指定行后退出
#通過q命令只顯示文件的第一行,即從第1行顯示到第5行就退出了執行。 sed '5 q' 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 7654,martin,salesman,7698,'1981-9-28',1250,1400,30# 指定范圍行退出執行僅支持單行號,如果指定行首和行尾兩個參數則報錯。詳見下: #sed '7,12 q' emp.txt sed: -e expression #1, char 6: command only uses one address匹配關鍵字后退出執行
#首次匹配到manager后退出執行。 sed '/manager/q' 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讀命令
讀文件追加內容
# 讀取文件file_tmp.txt的內容追加到emp.txt之后 sed '$ r file_tmp.txt' emp.txt讀文件匹配關鍵字后追加內容
# emp.txt里匹配到關鍵字manager之后插入文件file_tmp.txt的內容 sed -n '/manager/ r file_tmp.txt' emp.txt# 結果,部分示例內容 7655,jack,manager,7698,'1987-3-28',1600,1800,10 /usr/apps/bin:/usr/local/bin:/root/ /usr/local/sbin:/usr/apps/sbin:/opt/bin 7656,tim,clerk,7902,'1982-12-12',1400,1400,30 7657,kate,clerk,7902,'1989-11-11',1400,1800,10 7698,blake,manager,7839,'1981-5-1',2850,null,30 /usr/apps/bin:/usr/local/bin:/root/ /usr/local/sbin:/usr/apps/sbin:/opt/bin 7699,dlake,salesman,7839,'1983-6-15',3000,null,10?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的打开高效文本编辑之门_Linux Sed插入追加转换退出等命令应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 95式步枪的替代者会是什么样
- 下一篇: 62式坦克为什么比59式退役早?