shell命令

shell中的幾個常用命令

本文為[1]書中內(nèi)容簡要總結(jié)。

1 xargs

語法

command | xargs

xargs 將stdin接收到的命令重新格式化础嫡,然后再講解作為參數(shù)提供給其他命令。

將多行輸入變?yōu)閱涡?/p>

cat example.txt | xargs

將單行變多行

cat example.txt | xargs -n 3

每行三個元素

定界符分隔參數(shù)

echo "splitXsplitXsplitXsplitX" | xargs -d X

(2)結(jié)合find使用xargs

find . -type f -name "*.txt" -print0 | xargs =o rm -f

xargs -0 將\0當作輸入定界符

2 sed

(1)sed可以替換給定文本中的字符串酝惧,利用正則表達式匹配

sed 's/pattern/replace_string/' file

將結(jié)果直接應(yīng)用于原文件

sed 's/text/replace/' file > newfile
mv newfile file

或者

sed -i 's/text/replace/' file

替換所有內(nèi)容榴鼎,我們需要在命令行尾部加入/g

sed 's/pattern/replace_string/g' file

有時候我們不需要替換前N-1處匹配,二是需要替換剩下的匹配晚唇。

echo this thisthisthis | sed 's/this/THIS/2g'

Mac 下命令有誤巫财,ubuntu可以,可能我用的shell不同

(2)移出空白行

sed '/^$/d' file

/pattern/d 會移出匹配樣式的行

(3)已匹配字符串標記&

echo this is an example | sed 's/\w\+/[&]/g'

(4)子串匹配標記\1

echo this is digit 7 in number | sed 's/digit \([0-9]\)/\1/'

(5)引用

text=hello
echo hello world | sed "s/$text/HELLO/"

sed表達式中引用變量字符串的時候缺亮,可以使用雙引號

3 awk

(1)awk腳本的結(jié)構(gòu)基本如下所示:

awk ' BEGIN{ print "start" } pattern {commands} END{print "END"}'
file

(2)awk命令的工作方式如下:

  1. 執(zhí)行BEGIN{ commands }語塊中的語句翁涤。
  2. 從文件或者stdin中讀取一行,然后執(zhí)行pattern { commands }萌踱。重復(fù)這個過程葵礼,直到文件全部讀取完畢。
  3. 當讀至輸入流末尾時并鸵,執(zhí)行END { commands }語句塊鸳粉。

例子: 統(tǒng)計代碼

find ~/Documents/Python/MxShop-master -type f -name "*.py" -print0 | xargs -0 wc -l | awk '{sum+=$1}END{print sum}'
64540

(3) 特殊變量

NR: 表示記錄數(shù)量,在執(zhí)行過程中相當于當前行號
NF: 表示字段數(shù)量园担,在執(zhí)行過程中相當于當前行的字段數(shù)
$0: 這個變量包含執(zhí)行過程中當前行的文本內(nèi)容
$1: 這個變量包含執(zhí)行過程中第一個字段(第一列)的文本內(nèi)容
$2: 這個變量包含執(zhí)行過程中第二個字段(第二列)的文本內(nèi)容

例子:

echo -e "line1 f2 f3 \nline2 f4 f5 \nline3 f6 f7" | \
awk '{print "Line no:" NR ", No of fields:" NF, "$0=" $0, "$1=" $1, "$2=" $2, "$3=" $3}'

打印每一行的第2和第3個字段:

awk '{ print $3,$2 }' file

統(tǒng)計文件中的行數(shù):

awk 'END {print NR}' file

(4)將外部變量值傳遞給awk

當輸入來自于文件的時候

awk '{print v1,v2 }' v1=$var1,v2=$var2 filename

(5)用geline讀取行

grep 默認讀取一個文件中的所有行届谈,如果只想讀取某一行枯夜,可以使用getline函數(shù)讀取某一行,有時候我們需要從BEGIN語句中讀取第一行

seq 5 | awk 'BEGIN {getline; print "Read ahead first line", $0} {print $0}'

(6)用樣式對awk處理的行進行過濾

awk 'NR<5'
awk 'NR==1,NR==4' 
awk '/linux/'
awk '1/linux/' 

(7)設(shè)置字段定界符

默認的字段定界符是空格

awk -F: '{ print $NF }' /etc/passwd
awk '{BEGIN{FS=":"} print $NF }' /etc/passwd

(8)在awk中使用循環(huán)

awk 'BEGIN {for(i=0;i<10;i++) print i}'
awk 'BEGIN {for(i in array) print i}'

4 grep

(1)語法

grep match_pattern filename

使用正則表達式的時候可以

grep -E "[a-z]+"
egrep "[a-z]+"

只輸出匹配到的行:

echo this is a line. | grep -o -E "[a-z]+\."
echo this is a line. | grep -o "[a-z]+\."

統(tǒng)計文件中匹配字符串的行數(shù)

grep -c "text" filename

打印包含匹配字符串的行數(shù)

grep linux -n sample1.txt sample2.txt

打印樣式匹配所位于的字符或字節(jié)偏移:

echo gnu is not unix | grep -b -o "not"

找出匹配文本位于哪一個文件中

grep -l linux sample1.txt sample2.txt

(2)遞歸搜索

grep "test_function()" . -R -n

(3)忽略樣式中的大小寫

echo hello world | grep -i "HELLO"

(4)grep 匹配多個樣式

grep -e "pattern1" -e "pattern2"

(5)grep 搜索中包括或排除文件

grep "main" . -r --include *.{c,cpp}

(6)打印出匹配文本之前或者之后的行

之后幾行

seq 10 | grep 5 -A 3

之后幾前

seq 10 | grep 5 -B 3

之前之后幾行

seq 10 | grep 5 -C 3

[1]Linux Shell 腳本攻略

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艰山,一起剝皮案震驚了整個濱河市湖雹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌曙搬,老刑警劉巖摔吏,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纵装,居然都是意外死亡征讲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門橡娄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诗箍,“玉大人,你說我怎么就攤上這事挽唉÷俗妫” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵橱夭,是天一觀的道長氨距。 經(jīng)常有香客問我桑逝,道長棘劣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任楞遏,我火速辦了婚禮茬暇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寡喝。我一直安慰自己糙俗,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布预鬓。 她就那樣靜靜地躺著巧骚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪格二。 梳的紋絲不亂的頭發(fā)上劈彪,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音顶猜,去河邊找鬼沧奴。 笑死,一個胖子當著我的面吹牛长窄,可吹牛的內(nèi)容都是我干的滔吠。 我是一名探鬼主播纲菌,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疮绷!你這毒婦竟也來了翰舌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤冬骚,失蹤者是張志新(化名)和其女友劉穎灶芝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唉韭,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡夜涕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了属愤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片女器。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖住诸,靈堂內(nèi)的尸體忽然破棺而出驾胆,到底是詐尸還是另有隱情,我是刑警寧澤贱呐,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布丧诺,位于F島的核電站,受9級特大地震影響奄薇,放射性物質(zhì)發(fā)生泄漏驳阎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一馁蒂、第九天 我趴在偏房一處隱蔽的房頂上張望呵晚。 院中可真熱鬧,春花似錦沫屡、人聲如沸饵隙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽金矛。三九已至,卻和暖如春勺届,著一層夾襖步出監(jiān)牢的瞬間驶俊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工涮因, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留废睦,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓养泡,卻偏偏與公主長得像嗜湃,于是被迫代替她去往敵國和親奈应。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容