Linux Shell編程-字符截取和處理命令
一 cut命令
cut 選項 文件名
-f 列號,列號 :提取第幾列,多個列用,分隔
-d 分隔符:按照指定分隔符分隔列
比如有一個文件student.txt
注意,每個列直接用的TAB鍵
cut -f 2,3 student.txt
截取第2列和第3列
cut -d “:”-f 1,3 /etc/passwd
cut命令的局限
如果想以” “空格來分割,截圖第3列,是截圖不到的,因為第一列和第二列直接空格特別多。
二 printf命令
printf ‘輸出類型輸出格式’ 輸出內容
輸出類型
%ns 輸出字符串,n是數字,代表輸出幾個字符
%ni 輸出整數,n是數字,代表輸出幾個數字
%m.nf 輸出浮點數,%8.2f 輸出6位整數和2位小數
來看例子
printf %s 1 2 3 4 5 6
這樣,雖然參數每個數字之間有空格,但是打印出來完全連在一起
printf %s %s %s 1 2 3 4 5 6
如果不加單引號,那麼後面兩個%s會被當成字符串
printf ‘%s %s %s’ 1 2 3 4 5 6
這樣輸出類型中3個%s,那麼接下來的內容就3個一組加空格輸出
printf ‘%s %s %s\n’ 1 2 3 4 5 6
\n代表換行
printf ‘%s’ $(cat student.txt)
不調整格式輸出student.txt文件的內容
如果想調整格式輸出
注:在下面要講的awk命令的輸出中支持print和printf命令
print命令會在每個輸出之後自動加入換行符
printf命令不會自動加入換行符,需要手工加入
三 awk命令
awk ‘條件1{動作1} 條件2{動作2}…’ 文件名
條件
一般使用關系表達式作為條件
x>10
x>=10
x<=10
動作
格式化輸出
流程控制語句
下面舉例來看
截取第2列和第6列
截取第1列和第3列,這裡我們看到,雖然df -h的輸出結果是空格很多,但是依然可以截取,這就是awk比cut強大的地方
在截圖第2列和第6列之前加上了一段描述的語言
在結尾加上一段描述語言
在開始的時候用FS指定分隔符
判斷第6列大於87,然後截圖第2列
四 sed命令
sed主要是用來將數據進行選取,替換,刪除,新增的命令
sed 選項 ‘動作’ 文件名
選項:
-n: 一般sed命令會把所有內容輸出到屏幕,如果加了-n,只會把sed命令處理的行輸出到屏幕
-e: 允許對輸出數據應用多條sed命令編輯
-i: 用sed的修改結果直接修改讀取數據的文件,而不是由屏幕輸出
動作:
a :追加,在當前行後添加一行或多行,添加多行時,除最後一行外,每行末尾要加\代表數據未完結
c :行替換,用c後面的字符串替換原數據行,替換多行時,除最後一行外,每行末尾要加\代表數據未完結
i :插入,在當前行前插入一行或多行,插入多行時,除最後一行外,每行末尾要加\代表數據未完結
d:刪除指定行
p:輸出指定行
s:字符替換,格式為”行范圍s/舊字串/新字串/g”
下面來舉例子,依然用之前的student.txt文件
不加-n就會全部輸出
指定輸出第2行
刪除第2行和第4行的數據,但是不修改文件本身
在第2行後插入hello
在第2行後插入兩行
替換第2行
把第3行的74換成99
同時把Liming和Gao替換成空
五 sort命令
sort 選項 文件名
選項:
-f:忽略大小寫
-n:以數值型進行排序,默認以字符串進行排序
-r:反向排序
-t:指定分隔符,默認分割符是制表符
-k n[,m]:按照指定的字段范圍排序,從第n個字段開始,m字段結束(默認到行尾)
舉例子
sort /etc/passwd
按開頭字母排序的
sort -r /etc/passwd
反向排序
sort -n -t “:” -k 3,3 /etc/passwd
用第3個字段,以數值方式排序
好了,Linux Shell編程-字符截取和處理命令就總結到這裡,如有問題,歡迎指正,謝謝。