本文講的字串提取指的是從檔案或某個輸出中提取符合條件的列的內容,如果某個檔案或輸出中它的每一行的資訊都是使用特定的分隔符來分割的話,就可以使用字串的提取功能,本文涉及到的命令包括cut、printf、awk、sed等,
cut命令
cut [選項] 檔案名:在檔案中提取符合條件的列,
選項:
- -f 列號:提取第幾列,提取多列只需要將列號用逗號隔開即可,
- -d 分隔符:按照指定分隔符分割列,如果分割符使用的是制表符tab,則不用特地指定分隔符,且對于cut命令來說,不能使用空格來作為分隔符,
示例:“cut -d ":" -f 1,3 /etc/passwd”表示使用分號作為分隔符分割檔案后提取第一列和第三列的內容,
printf格式化輸出
平常使用字串輸出時使用cat或echo命令即可,printf命令只是在AWK編程中比較常用,在平常的使用中并不常用,AWK編程中,會有print命令和printf命令,但是printf是Linux的標準輸出命令,但是它默認沒有輸出換行符,而print在Linux命令中是沒有的,且默認會自動輸出換行符,
printf "輸出型別和格式" 輸出內容:格式化輸出字串(使用單引號或者雙引號都行),
輸出型別:
- %ns:輸出字串,n是數字,表示輸出多少個字符,
- %ni:輸出整數,n是數字,表示輸出多少個數字,
- %m.nf:輸出浮點數,m和n是數字,表示輸出的整數位數和小數位數,
輸出格式:
- \a:輸出警告聲音,
- \b:輸出退格鍵,
- \f:清除螢屏,
- \n:換行,
- \r:回車,
- \t:水平制表符,
- \v:垂直制表符,
AWK命令
AWK命令因為功能強大且復雜,所以通常也稱為AWK編程,但是它的作用也是用來提取指定的列,
awk命令可以自動識別空格分隔的字串(即使每列分隔的空格數不同也行),但cut命令就不可以,
awk '條件1{動作1} 條件2{動作2}...' 檔案名:提取符合條件的字串,也可以使用管道符的結果作為檔案內容,
常用條件:
- x>10:判斷x是否大于10,
- x>=10:大于等于,
- x<=10:小于等于,
- BEGIN:在執行檔案內容的所有動作之前先執行這個命令,
- END:在執行完所有動作之后執行這個命令,
常用動作:
- 格式化輸出,
- 流程控制陳述句,
- FS:指定分割符,如BEGIN{FS=":"}以冒號作為分割符,通常會和BEGIN配合使用,不然第一行字串不會被分割處理,
示例:
awk '{printf $2 "\t" $6 "\n"}' test.txt:輸出檔案中所有內容的第2列和第6列,第2列和第6列之間使用制表符分隔,并且第6列之后輸出換行符(這里的printf如果換為print,就可以不用指定換行符了),
df -h | grep sda5 | awk '{print $5}':查詢磁區資訊中包含sda5的行,并輸出這些行的第5列(可以自動以空格作為分隔符,)
sed命令
sed其實就是一個輕量級的流編輯器,sed命令主要用來進行資料的選取、替換、洗掉、新增,
sed和vim等編輯器的區別在于,vim操作的物件是一個檔案,sed操作的物件不僅可以是檔案,也可以是其他命令的結果或管道符輸出的結果,
sed [選項] '[動作]' 檔案名:處理輸出并輸出到螢屏或檔案,
選項:
- -n:一般sed命令會把所有資料都輸出到螢屏,如果加入此選項,則只會把經過sed命令處理的行輸出到螢屏,
- -e:允許對輸入資料應用多條sed命令編輯,多個命令之間使用分號隔開,
- -i:用sed的修改結果直接修改讀取資料的檔案,而不是輸出到螢屏(如果是處理檔案,還是建議使用vim等編輯器而不是使用-i選項),
動作:
- a \:追加,在指定行后追加一行或多行資料,使用\表示達到換行效果(它本身表示資料還未輸出完,換一行繼續輸出),如“sed '2a hello \ welcome' test.txt”表示在這個檔案中第2行之后追加兩行資料hello和welcome,
- c \:行替換,使用指定的字串替換原來的資料行,想要將指定行替換為多行的資料,同樣使用\即可,
- i \:插入,在指定行之前插入一行或多行資料,
- d:洗掉指定行,
- p:列印指定行,如“sed -n '2p'”表示只列印第2行,注意p選項一般和n一起使用,因為不加-n的話默認會先輸出全部資料,然后再額外輸出p選項指定的行,但這樣的效果肯定不會是我們想要的,
- s:字串替換,格式為“sed '[n]s/舊字串/新字串/g' 檔案名”,如果不指定n則表示檔案全部內容,如果想要指定多行,則行號之間使用逗號隔開即可,如“sed '3s/99/55/g' test.txt”表示將檔案中第3行中的99替換為55,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/100136.html
標籤:Linux
上一篇:Shell筆記:正則運算式
下一篇:Shell筆記:測驗選項
