shell特殊符号cut命令 sort_wc_uniq命令 tee_tr_split命令 shell特殊符号
1. 特殊符號
* 任意個任意字符
*代表零個或多個任意字符
? 任意一個字符
?只代表一個任意的字符
# 注釋字符
表示注釋說明,即#后面的內容都會被忽略
\ 脫義字符
這個字符會將后面的特殊符號 (如*) 還原為普通字符
|
管道福
這個字符前面曾多次出現(xiàn)過,它的作用是將前面命令的輸出作為后面命令的輸人。這里提到的后面的命令,并不是所有的命令都可以的,一般針對文檔操作的命令比較常用。例如cat、less、head, tail、grep、cut、sort、wc、uniq、tee、tr、split、sed、awk等,其中grep、sed和awk是正則表達式,必須掌握的工具
?
2.cut命令
cut命令用來顯示行中的指定部分,刪除文件中指定字段。cut經(jīng)常用來顯示文件的內容,類似于下的type命令。
說明:該命令有兩項功能,其一是用來顯示文件的內容,它依次讀取由參數(shù)file所指 明的文件,將它們的內容輸出到標準輸出上;其二是連接兩個或多個文件,如cut fl f2 > f3將把文件fl和幾的內容合并起來,然后通過輸出重定向符“>”的作用,將它們放入文件f3中。
當文件較大時,文本在屏幕上迅速閃過(滾屏),用戶往往看不清所顯示的內容。因此,一般用more等命令分屏顯示。為了控制滾屏,可以按Ctrl+S鍵,停止?jié)L屏;按Ctrl+Q鍵可以恢復滾屏。按Ctrl+C(中斷)鍵可以終止該命令的執(zhí)行,并且返回Shell提示符狀態(tài)。
語法
cut(選項)(參數(shù))
選項
-b:僅顯示行中指定直接范圍的內容;
-c:僅顯示行中指定范圍的字符;
-d:指定字段的分隔符,默認的字段分隔符為“TAB”;
-f:顯示指定字段的內容;
-n:與“-b”選項連用,不分割多字節(jié)字符;
--complement:補足被選擇的字節(jié)、字符或字段;
--out-delimiter=<字段分隔符>:指定輸出內容是的字段分割符;
--help:顯示指令的幫助信息;
--version:顯示指令的版本信息。
參數(shù)
文件:指定要進行內容過濾的文件。
實例
例如有一個學生報表信息,包含No、Name、Mark、Percent:
[root@pantinglinux]# cat test.txt?
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98
使用 -f 選項提取指定字段:
[root@pantinglinux]# cut -f 1 test.txt?
No
01
02
03
[root@pantinglinux]# cut -f2,3 test.txt?
Name Mark
tom 69
jack 71
alex 68
--complement 選項提取指定字段之外的列(打印除了第二列之外的列):
[root@pantinglinux]# cut -f2 --complement test.txt?
No Mark Percent
01 69 91
02 71 87
03 68 98
使用 -d 選項指定字段分隔符:
[root@pantinglinux]# cat test2.txt?
No;Name;Mark;Percent
01;tom;69;91
02;jack;71;87
03;alex;68;98
[root@pantinglinux]# cut -f2 -d";" test2.txt?
Name
tom
jack
alex
指定字段的字符或者字節(jié)范圍
cut命令可以將一串字符作為列來顯示,字符字段的記法:
N-:從第N個字節(jié)、字符、字段到結尾;
N-M:從第N個字節(jié)、字符、字段到第M個(包括M在內)字節(jié)、字符、字段;
-M:從第1個字節(jié)、字符、字段到第M個(包括M在內)字節(jié)、字符、字段。
上面是記法,結合下面選項將摸個范圍的字節(jié)、字符指定為字段:
-b 表示字節(jié);
-c 表示字符;
-f 表示定義字段。
示例
[root@pantinglinux]# cat test.txt?
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
打印第1個到第3個字符:
[root@pantinglinux]# cut -c1-3 test.txt?
abc
abc
abc
abc
abc
打印前2個字符:
[root@pantinglinux]# cut -c-2 test.txt?
ab
ab
ab
ab
ab
打印從第5個字符開始到結尾:
[root@pantinglinux]# cut -c5- test.txt?
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
-
2. wc命令用于統(tǒng)計文檔的行數(shù)、字符數(shù)或詞數(shù)。
常用選項
-l:統(tǒng)計行數(shù)
-m:統(tǒng)計字衣數(shù)
-w:統(tǒng)計詞數(shù)
不跟任何選項,直接跟文檔,則會把行數(shù)、詞數(shù)和字符數(shù)依次輸出
3. uniq命令用來刪除重復的行,該命令只有- c選項比較常用,它表示統(tǒng)計重復的行數(shù),并把行數(shù)寫在前面
去重要有條件的,先排除,才能去重
8.12 tee_tr_split命令
1. 命令tee 和>類似,重定向的同時還在屏幕顯示,該命令常用于管道符 | 后。
有2層含義:先重定向,再把管道前面的結果打印在屏幕上。
清空a.txt,就用命令【>】可以了
選項“-a“就是追加
2. tr命令用于替換字符,常用來處理文檔中出現(xiàn)的特殊符號。
該命令常用的選項有以下兩個。
-d:表示刪除某個字符,后面跟要刪除的字符。
-s:表示刪除重復的字符。
3. split命令用于切割文檔
常用的選項
-b:表示依據(jù)大小來分割文檔,單位為byte
-l:表示依據(jù)行數(shù)來分割文檔
如果split不指定目標文件名,則會以xaa、xab…..這樣的文件名來存取切割后的文件。當然,我們也可以指定目標文件
wc命令:
用來計算數(shù)字。利用wc指令我們可以計算文件的Byte數(shù)、字數(shù)或是列數(shù),若不指定文件名稱,或是所給予的文件名為“-”,則wc指令會從標準輸入設備讀取數(shù)據(jù)。
語法
wc(選項)(參數(shù))
選項
-c或--bytes或——chars:只顯示Bytes數(shù);
-l或——lines:只顯示列數(shù);
-w或——words:只顯示字數(shù)。
參數(shù)
文件:需要統(tǒng)計的文件列表。
8.13 shell特殊符號下
$ 變量前綴,!$組合,正則里面表示行尾
;多條命令寫到一行,用分號分割.
~ 用戶家目錄,后面正則表達式表示匹配符
& 放到命令后面,會把命令丟到后臺
重定向符號>; >>; 2>; 2>>; &>
[ ] 指定字符中的一個,[0-9],[a-zA-Z],[abc]
|| 和 && ,用于命令之間
command1;command2 :使用;時,不管command1是否執(zhí)行成功,都會執(zhí)行command2。
command1 && command2 :使用&&時,只有command1執(zhí)行成功后,command2才會執(zhí)行,否則command2不執(zhí)行。
command1 | | command2:使用 | | 時,command1執(zhí)行成功后則command2不執(zhí)行,否則執(zhí)行command2,即command1和command2中總有一條命令會執(zhí)行。
?
sort命令:
是在Linux里非常有用,它將文件進行排序,并將排序結果標準輸出。sort命令既可以從特定的文件,也可以從stdin中獲取輸入。
語法
sort(選項)(參數(shù))
選項
-b:忽略每行前面開始出的空格字符;
-c:檢查文件是否已經(jīng)按照順序排序;
-d:排序時,處理英文字母、數(shù)字及空格字符外,忽略其他的字符;
-f:排序時,將小寫字母視為大寫字母;
-i:排序時,除了040至176之間的ASCII字符外,忽略其他的字符;
-m:將幾個排序號的文件進行合并;
-M:將前面3個字母依照月份的縮寫進行排序;
-n:依照數(shù)值的大小排序;
-o<輸出文件>:將排序后的結果存入制定的文件;
-r:以相反的順序來排序;
-t<分隔字符>:指定排序時所用的欄位分隔字符;
+<起始欄位>-<結束欄位>:以指定的欄位來排序,范圍由起始欄位到結束欄位的前一欄位。
參數(shù)
文件:指定待排序的文件列表。
實例
sort將文件/文本的每一行作為一個單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進行比較,最后將他們按升序輸出。
[root@pantinglinux]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
[root@pantinglinux]# sort sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
eee:50:5.5
忽略相同行使用-u選項或者uniq:
[root@pantinglinux]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
[root@pantinglinux]# sort -u sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
或者
[root@pantinglinux]# uniq sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
sort的-n、-r、-k、-t選項的使用:
[root@pantinglinux]# cat sort.txt
AAA:BB:CC
aaa:30:1.6
ccc:50:3.3
ddd:20:4.2
bbb:10:2.5
eee:40:5.4
eee:60:5.1
#將BB列按照數(shù)字從小到大順序排列:
[root@pantinglinux]# sort -nk 2 -t: sort.txt
AAA:BB:CC
bbb:10:2.5
ddd:20:4.2
aaa:30:1.6
eee:40:5.4
ccc:50:3.3
eee:60:5.1
#將CC列數(shù)字從大到小順序排列:
[root@pantinglinux]# sort -nrk 3 -t: sort.txt
eee:40:5.4
eee:60:5.1
ddd:20:4.2
ccc:50:3.3
bbb:10:2.5
aaa:30:1.6
AAA:BB:CC
# -n是按照數(shù)字大小排序,-r是以相反順序,-k是指定需要愛排序的欄位,-t指定欄位分隔符為冒號
-k選項的具體語法格式:
-k選項的語法格式:
FStart.CStart Modifie,FEnd.CEnd Modifier
-------Start--------,-------End--------
FStart.CStart 選項 , FEnd.CEnd 選項
這個語法格式可以被其中的逗號,分為兩大部分,Start部分和End部分。Start部分也由三部分組成,其中的Modifier部分就是我們之前說過的類似n和r的選項部分。我們重點說說Start部分的FStart和C.Start。C.Start也是可以省略的,省略的話就表示從本域的開頭部分開始。FStart.CStart,其中FStart就是表示使用的域,而CStart則表示在FStart域中從第幾個字符開始算“排序首字符”。同理,在End部分中,你可以設定FEnd.CEnd,如果你省略.CEnd,則表示結尾到“域尾”,即本域的最后一個字符。或者,如果你將CEnd設定為0(零),也是表示結尾到“域尾”。
從公司英文名稱的第二個字母開始進行排序:
$ sort -t ' ' -k 1.2 facebook.txt
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000
使用了-k 1.2,表示對第一個域的第二個字符開始到本域的最后一個字符為止的字符串進行排序。你會發(fā)現(xiàn)baidu因為第二個字母是a而名列榜首。sohu和 google第二個字符都是o,但sohu的h在google的o前面,所以兩者分別排在第二和第三。guge只能屈居第四了。
只針對公司英文名稱的第二個字母進行排序,如果相同的按照員工工資進行降序排序:
$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
由于只對第二個字母進行排序,所以我們使用了-k 1.2,1.2的表示方式,表示我們“只”對第二個字母進行排序。(如果你問“我使用-k 1.2怎么不行?”,當然不行,因為你省略了End部分,這就意味著你將對從第二個字母起到本域最后一個字符為止的字符串進行排序)。對于員工工資進行排 序,我們也使用了-k 3,3,這是最準確的表述,表示我們“只”對本域進行排序,因為如果你省略了后面的3,就變成了我們“對第3個域開始到最后一個域位置的內容進行排序” 了。
?
?
uniq命令:
uniq命令用于報告或忽略文件中的重復行,一般與sort命令結合使用。
語法
uniq(選項)(參數(shù))
選項
-c或——count:在每列旁邊顯示該行重復出現(xiàn)的次數(shù);
-d或--repeated:僅顯示重復出現(xiàn)的行列;
-f<欄位>或--skip-fields=<欄位>:忽略比較指定的欄位;
-s<字符位置>或--skip-chars=<字符位置>:忽略比較指定的字符;
-u或——unique:僅顯示出一次的行列;
-w<字符位置>或--check-chars=<字符位置>:指定要比較的字符。
參數(shù)
輸入文件:指定要去除的重復行文件。如果不指定此項,則從標準讀取數(shù)據(jù);
輸出文件:指定要去除重復行后的內容要寫入的輸出文件。如果不指定此選項,則將內容顯示到標準輸出設備(顯示終端)。
實例
刪除重復行:
uniq file.txt
sort file.txt | uniq
sort -u file.txt
只顯示單一行:
uniq -u file.txt
sort file.txt | uniq -u
統(tǒng)計各行在文件中出現(xiàn)的次數(shù):
sort file.txt | uniq -c
在文件中找出重復的行:
sort file.txt | uniq -d
?
tee命令:
?
tee命令用于將數(shù)據(jù)重定向到文件,另一方面還可以提供一份重定向數(shù)據(jù)的副本作為后續(xù)命令的stdin。簡單的說就是把數(shù)據(jù)重定向到給定文件和屏幕上。
存在緩存機制,每1024個字節(jié)將輸出一次。若從管道接收輸入數(shù)據(jù),應該是緩沖區(qū)滿,才將數(shù)據(jù)轉存到指定的文件中。若文件內容不到1024個字節(jié),則接收完從標準輸入設備讀入的數(shù)據(jù)后,將刷新一次緩沖區(qū),并轉存數(shù)據(jù)到指定文件。
語法
tee(選項)(參數(shù))
選項
-a:向文件中重定向時使用追加模式;
-i:忽略中斷(interrupt)信號。
參數(shù)
文件:指定輸出重定向的文件。
在終端打印stdout同時重定向到文件中:
ls | tee out.txt
1.sh
1.txt
2.txt
eee.tst
EEE.tst
one
out.txt
string2
www.pdf
WWW.pdf
WWW.pef
[root@pantinglinux]# ls | tee out.txt | cat -n
1 1.sh
2 1.txt
3 2.txt
4 eee.tst
5 EEE.tst
6 one
7 out.txt
8 string2
9 www.pdf
10 WWW.pdf
11 WWW.pef
?
?
?
?
?
tr命令:
tr命令可以對來自標準輸入的字符進行替換、壓縮和刪除。它可以將一組字符變成另一組字符,經(jīng)常用來編寫優(yōu)美的單行命令,作用很強大。
語法
tr(選項)(參數(shù))
選項
-c或——complerment:取代所有不屬于第一字符集的字符;
-d或——delete:刪除所有屬于第一字符集的字符;
-s或--squeeze-repeats:把連續(xù)重復的字符以單獨一個字符表示;
-t或--truncate-set1:先刪除第一字符集較第二字符集多出的字符。
參數(shù)
字符集1:指定要轉換或刪除的原字符集。當執(zhí)行轉換操作時,必須使用參數(shù)“字符集2”指定轉換的目標字符集。但執(zhí)行刪除操作時,不需要參數(shù)“字符集2”;
字符集2:指定要轉換成的目標字符集。
實例
將輸入字符由大寫轉換為小寫:
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world
'A-Z' 和 'a-z'都是集合,集合是可以自己制定的,例如:'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都屬于集合,集合里可以使用'\n'、'\t',可以可以使用其他ASCII字符。
使用tr刪除字符:
echo "hello 123 world 456" | tr -d '0-9'
hello world?
將制表符轉換為空格:
cat text | tr '\t' ' '
字符集補集,從輸入文本中將不在補集中的所有字符刪除:
echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'
1 2 3 4
此例中,補集中包含了數(shù)字0~9、空格和換行符\n,所以沒有被刪除,其他字符全部被刪除了。
用tr壓縮字符,可以壓縮輸入中重復的字符:
echo "thissss is a text linnnnnnne." | tr -s ' sn'
this is a text line.
巧妙使用tr做數(shù)字相加操作:
echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr '\n' '+') 0 ]
刪除Windows文件“造成”的'^M'字符:
cat file | tr -s "\r" "\n" > new_file
或
cat file | tr -d "\r" > new_file
tr可以使用的字符類:
[:alnum:]:字母和數(shù)字
[:alpha:]:字母
[:cntrl:]:控制(非打印)字符
[:digit:]:數(shù)字
[:graph:]:圖形字符
[:lower:]:小寫字母
[:print:]:可打印字符
[:punct:]:標點符號
[:space:]:空白字符
[:upper:]:大寫字母
[:xdigit:]:十六進制字符
使用方式:
tr '[:lower:]' '[:upper:]'
?
?
split命令:
split命令可以將一個大文件分割成很多個小文件,有時需要將文件分割成更小的片段,比如為提高可讀性,生成日志等。
選項
-b:值為每一輸出檔案的大小,單位為 byte。
-C:每一輸出檔中,單行的最大 byte 數(shù)。
-d:使用數(shù)字作為后綴。
-l:值為每一輸出檔的列數(shù)大小。
實例
生成一個大小為100KB的測試文件:
[root@localhost split]# dd if=/dev/zero bs=100k count=1 of=date.file
1+0 records in
1+0 records out
102400 bytes (102 kB) copied, 0.00043 seconds, 238 MB/s
使用split命令將上面創(chuàng)建的date.file文件分割成大小為10KB的小文件:
[root@localhost split]# split -b 10k date.file?
[root@localhost split]# ls
date.file xaa xab xac xad xae xaf xag xah xai xaj
文件被分割成多個帶有字母的后綴文件,如果想用數(shù)字后綴可使用-d參數(shù),同時可以使用-a length來指定后綴的長度:
[root@localhost split]# split -b 10k date.file -d -a 3
[root@localhost split]# ls
date.file x000 x001 x002 x003 x004 x005 x006 x007 x008 x009
為分割后的文件指定文件名的前綴:
[root@localhost split]# split -b 10k date.file -d -a 3 split_file
[root@localhost split]# ls
date.file split_file000 split_file001 split_file002 split_file003 split_file004 split_file005 split_file006 split_file007 split_file008 split_file009
使用-l選項根據(jù)文件的行數(shù)來分割文件,例如把文件分割成每個包含10行的小文件:
split -l 10 date.file
?
習題:1.HISTSIZE=10000
修改各種/etc/profile??bashrc
2.雙引號下要轉義。可將雙引號改單引。
3.for i in `ls`;do mv $i `echo??$i|tr '[a-z]' '[A-Z]'`;done
4.sort -t: -k5 filename
5.cut -d: -f3 filename
6./etc/profile? ? ? ? 不管哪個用戶,登陸時都會讀取該文件。
/etc/bashrc? ? ? ? bash執(zhí)行時,不管是何種方式,都會讀取此文件
.bashrc? ? ? ? ? ? ? ? 當bash以non login方式執(zhí)行時,讀取此文件。
.bashrc_profile? ? ? ? 當bash以login形式執(zhí)行時,讀取此文件。通常該配置文件還
會配置成去讀取.bashrc。
7.export 定義子bash繼承的全局變量
8.a. 設定變量的格式為”a=b”,其中a為變量名,b為變量的內容,等號兩邊不
能有空格;
b. 變量名只能由英、數(shù)字以及下劃線組成,而且不能以數(shù)字開頭;
c. 當變量內容帶有特殊字符(如空格)時,需要加上單引號;
d. 如果變量內容中需要用到其他命令運行結果則可以使用反引號;
e. 變量內容可以累加其他變量的內容,需要加雙引號;
9.cmd &? ?fg
10.ls test*
11.重定向命令 > >> 2> 2>> 2>&1
12.alias short=long
13.cmd >> file 2>&1
14.split -b10M filename??
split -l10000 filename
15.;按順序執(zhí)行
&&前者成功,繼續(xù)執(zhí)行
||按順序執(zhí)行,直到執(zhí)行成功為止
16.設置某個用戶的.bashrc
17.env環(huán)境變量? ?set系統(tǒng)預設變量
轉載于:https://www.cnblogs.com/pta188/p/8933366.html
總結
以上是生活随笔為你收集整理的shell特殊符号cut命令 sort_wc_uniq命令 tee_tr_split命令 shell特殊符号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信背单词类小程序,小鸡单词源码下载,打
- 下一篇: Java程序(类的抽象与封装)