標籤:指令碼 sed cut
【著作權聲明:轉載請保留出處:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】
cut命令類似於awk,從行裡面抽取資訊,是一個功能弱化版的awk。
cut命令格式為:cut [options] filename
其中options有:
-d 指定與空格和t a b鍵不同的域分隔字元。類似於awk的“-F”。
-f field 指定剪下域數
-c list 指定剪下字元數。
首先我們來處理按:分割的password檔案:
# cat passwdroot:x:0:0:root:/root:/bin/shproxy:x:13:13:proxy:/bin:/bin/shoperator:x:37:37:Operator:/var:/bin/shftp:x:83:83:ftp:/home/ftp:/bin/shnobody:x:99:99:nobody:/home:/bin/shsshd:x:103:99:Operator:/var:/bin/sh
按:分割,然後取第一列和第六列,-f可以指定擷取的域數:
# cut -d: -f1,6 passwdroot:/rootproxy:/binoperator:/varftp:/home/ftpnobody:/homesshd:/var
指定域數還可以這樣寫:
# cut -d: -f 1-4,6 passwdroot:x:0:0:/rootproxy:x:13:13:/binoperator:x:37:37:/varftp:x:83:83:/home/ftpnobody:x:99:99:/homesshd:x:103:99:/var
awk的實現為:
# awk -F: 'BEGIN{OFS=":"}{print $1,$2,$3,$4,$6}' passwd root:x:0:0:/rootproxy:x:13:13:/binoperator:x:37:37:/varftp:x:83:83:/home/ftpnobody:x:99:99:/homesshd:x:103:99:/var
但是如果要指定多個字元來分割的話,cut就不行了,cut只支援單個分隔字元,二awk支援多個。比如我們以“bin”分分隔:
# awk -F"bin" 'BEGIN{OFS=":"}{print $1}' passwdroot:x:0:0:root:/root:/proxy:x:13:13:proxy:/operator:x:37:37:Operator:/var:/ftp:x:83:83:ftp:/home/ftp:/nobody:x:99:99:nobody:/home:/sshd:x:103:99:Operator:/var:/
使用cut:
# cut -d"bin" -f1 passwd cut: the delimiter must be a single characterTry 'cut --help' for more information.
這裡可以看見cut命令的功能很有限。
cut預設以tab鍵來分割,awk預設以空格或多個空格或tab鍵來分割:
# sed 's/:/\t/g' passwd | cut -f5rootproxyOperatorftpnobodyOperator# sed 's/:/\t/g' passwd | awk '{print $5}'rootproxyOperatorftpnobodyOperator
cut可以剪下第任一字元,看似功能強大,但很少有使用價值。使用- c選項指定精確剪下數目。這種方法需確切知道開始及結束字元。通常不用這種方法,除非在固定長度的域或檔案名稱上。
來看幾個例子就行了:
# cut -c1,2,4 passwdrotprxoprft:noossd
# cut -c5-9 passwd :x:0:y:x:1ator:x:83:dy:x::x:10
shell文本過濾編程(十):cut命令