shell進階

Bash官方文檔:https://www.gnu.org/software/bash/manual/bash.html

正則表達式 https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference

shell 運行環(huán)境

  1. bash下還可以再重新啟動?個shell,這個shell是sub shell新蟆,原shell會復 制??給他怕品。在sub shell中定義的變量族壳,會隨著sub shell的消亡?消失

  2. () 子shell中運行

  3. $(ls) 表示執(zhí)行l(wèi)s后的結(jié)果旭绒,與``作用一致纺且,不過可以嵌套

  4. {}當前shell中執(zhí)行

  5. $$當前腳本執(zhí)行的pid

  6. &后臺執(zhí)行

  7. $剩晴!運行在后臺最后一個作業(yè)的pid(進程ID)

shell Piping 管道

? Read ?來讀取輸?曼振,并賦值給變量

? echo 较木,printf可以簡單輸出變量红符。

? > ?le 將輸出重定向到另?個?件

? >> 表?追加 等價于tee -a

? < ?le 輸?重定向

| 表?管道,也就是前?個命令的輸出傳?下?個命令 的輸入

Linux 三劍客

grep(數(shù)據(jù)查找定位)

awk(數(shù)據(jù)切片)

sed(數(shù)據(jù)修改)

類?SQL

grep=select * from table

awk=select ?eld from table

sed=update table set ?eld=new where ?eld=old

grep

  • 常用 -i -v -o -E -oE

grep pattern file

grep -i pattern file 忽略大小寫

grep -o pattern file 精準匹配

grep -v pattern file 反轉(zhuǎn)查找劫映,輸出與查找條件不匹配的行

grep -E pattern file 擴展正則表達式

grep -A -B -C pattern file 顯示命中數(shù)據(jù)的上下文

grep pattern file -r dir / 遞歸搜索

一般使用 -oE 來模糊搜索

  • 實例

echo 'hello test!' | grep -o 'e'

在這里插入圖片描述

不加-o會把包含匹配信息所在行中的所有內(nèi)容輸出(不在一行的不會輸出)

正則表達式

  • 基本表達式

^開頭

$結(jié)尾

[a-z][0-9]區(qū)間

.匹配任意一個字符

*0個或多個 能匹配多少匹配多少

.* 加在一起就是:匹配任意多個字符


echo 1234 | grep -E "^.*?"            輸出  1234

  • 基本正則與擴展正則的區(qū)別

? 非貪婪模式 ,盡量少的匹配

+ ?個或者多個

() 分組

{} 范圍約束

| 匹配多個表達式的任何?個


echo 1234 | grep -oE ".*?"            輸出  為空

echo 1234 | grep -oE '..*?'            輸出 1

  2

  3

  4   

解讀:    .*?什么也沒有 再加個. 全部匹配

在這里插入圖片描述

echo "hello,nihao ,hi" | grep -E "(hello)|(hi)"  //該括號不加也行

  • curl命令:

curl 網(wǎng)址 | grep 正則

curl -s https://www.baidu.com/ | grep 正則

-s :加上表示會屏蔽curl的一些調(diào)試信息违孝,一般都加

'^ <a title=".*"'

^:精準匹配,表示這行開始時有空格泳赋,然后是<a title=

  • 實例

通過百度搜索關(guān)鍵字雌桑,然后通過正則匹配出搜索結(jié)果約xxx的內(nèi)容,關(guān)鍵字以文件的形式作為參數(shù)循環(huán)傳入

  1. 創(chuàng)建文件 vim keywords

  2. 輸入要搜索的關(guān)鍵字:java祖今、python校坑、C++

  3. shell執(zhí)行語句 while read m; do echo m; curl -s http://www.baidu.com/s?wd=\m; done < keywords | grep -o "結(jié)果約[0-9,]*"

awk命令

awk '條件類型1{動作1} 條件類型2{動作2} ...' filename

awk 'BEGIN{}END{}' 開始和結(jié)束

  • 常用命令

awk 'pattern{action}' ??

awk 'BEGIN{}END{}' ??開始和結(jié)束

awk '/Running/' ??????正則匹配

awk '/aa/,/bb/' ????????區(qū)間選擇

awk '$2~/xxx/' ??????字段匹配

awk 'NR=2' ???????? 取第二行

awk 'NR>1' ???????? 去掉第一行

  • awk 內(nèi)置變量

FS ??????字段分隔符

OFS????輸出數(shù)據(jù)的字段分隔符

RS ??????記錄分隔符

OR ???? 輸出字段的行分隔符

NF ??????字段數(shù)

NR ??????記錄數(shù)

  • awk的字段數(shù)據(jù)處理

-F 參數(shù)指定字段分隔符

BEGIN{FS='_'} 也可以表示分隔符

$0 代表當前記錄

$1 代表第一個字段

$N 代表第N個字段

$NF 代表最后一個字段

  • awk的字段分割

echo '1,2,3

>4,5,6

>7,8,9' | awk -F, '{print $2}'

其中-F 后的緊跟是分隔符,如圖的分隔符是“千诬,”

在這里插入圖片描述

echo PATH | awk 'BEGIN{RS=":"}{print0}' | awk -F/ '{print 1,2,3,4}'

在這里插入圖片描述

awk 'BEGIN{print 1*10*2}' ??????? 輸出 20

  • 把單行拆分為多行

? echo PATH | awk 'BEGIN{RS=":"}{print0}'

? echo PATH | awk 'BEGIN{RS=":"}{print NR,0}'

? echo $PATH | awk 'BEGIN{RS=":"}END{print NR}'

  • 多行組合為單行

? echo PATH | awk 'BEGIN{RS=":"}{print0}' | awk 'BEGIN{FS="\n";ORS=":"}{print $0}'

在這里插入圖片描述

'BEGIN{

初始化語句

}

{

pattern{actions}耍目;

pattern{actions};

...

}

END{

讀取所有輸入行后執(zhí)行語句

}'

? 如果BEGIN區(qū)塊存在徐绑,awk首先執(zhí)行它里面包含的動作指令邪驮。

? 當awk讀完所有的輸入行后,如果存在END區(qū)域傲茄,執(zhí)行END區(qū)域的指令

  • pattern`(條件)可以是以下兩種類型:
  1. 正則表達式:/正則表達式/

  2. 布爾表達式:表達式成立毅访,觸發(fā)相應(yīng)的actions執(zhí)行,如 5>3{print}

  • actions(動作)是由許多awk指令構(gòu)成
  1. awk的I/O指令有print盘榨、printf()喻粹、getline等

  2. awk的流程控制指令有if...else...、 while() {...}等

  3. 所有 awk 的動作草巡,亦即在 {} 內(nèi)的動作守呜,如果有需要多個指令輔助時,可利用分號“;”間隔, 或者直接以[Enter] 按鍵來隔開每個指令

  4. 與 bash shell 的變量不同查乒,在 awk 當中弥喉,變量可以直接使用,不需加上 $ 符號玛迄。

  • awk 主要是處理“每一行的字段內(nèi)的數(shù)據(jù)”档桃,而默認的“字段的分隔符號為 "空白鍵" 或 "[tab]鍵" ”! 也就是說憔晒,比如有這樣一行內(nèi)容“hello shell”藻肄, awk就會當成是兩列$1取第一列的數(shù)據(jù),$2取第二列的數(shù)據(jù)

例子:

curl https://testing-studio.com/ | grep -o "http[s]://.* " ---不用解釋吧(過濾http或https://開頭的)

----[s]表示區(qū)間

"http[s]://[^ '\“]* " 加上了[^ ‘\”] 表示不選擇以空格加單引號結(jié)尾的或者雙引號結(jié)尾對

注意:去掉了星號前面的點

sed

sed 本身也是一個管道命令拒担,可以分析 standard input 嘹屯,而且 sed 還可以將數(shù)據(jù)進行取代、刪除从撼、新增州弟、擷取特定行等等的功能

-n :使用安靜(silent)模式。在一般 sed 的用法中低零,所有來自 STDIN 的數(shù)據(jù)一般都會被列出到屏幕上婆翔。但如果加上 -n 參數(shù)后,則只有經(jīng)過 sed 特殊處理的那一行(或者動作)才會被列出來掏婶。

-e :直接在命令行界面上進行 sed 的動作編輯啃奴;

-f :直接將 sed 的動作寫在一個文件內(nèi), -f filename 則可以執(zhí)行 filename 內(nèi)的 sed 動作雄妥;

-r :sed 的動作支持的是延伸型正則表達式的語法最蕾。(默認是基礎(chǔ)正則表達式語法)

-i :直接修改讀取的文件內(nèi)容,而不是由屏幕輸出老厌。

動作說明: [n1[,n2]]function

n1, n2 :不見得會存在瘟则,一般代表“選擇進行動作的行數(shù)”,舉例來說枝秤,如果我的動作

是需要在 10 到 20 行之間進行的醋拧,則“ 10,20[動作行為] ”

function 有下面這些:

a :新增, a 的后面可以接字串淀弹,而這些字串會在新的一行出現(xiàn)(目前的下一行)~

c :取代丹壕, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行垦页!

d :刪除雀费,因為是刪除啊干奢,所以 d 后面通常不接任何咚咚痊焊;

i:插入, i 的后面可以接字串,而這些字串會在新的一行出現(xiàn)(目前的上一行)薄啥;

p :打印辕羽,亦即將某個選擇的數(shù)據(jù)印出。通常 p 會與參數(shù) sed -n 一起運行~

s :取代垄惧,可以取代匹配到的值刁愿!通常這個 s 的動作可以搭配正則表達式!

例如 1,20s/old/new/g就是啦到逊!

在這里插入圖片描述

less命令

curl -s http://www.baidu.com | less 進入交互式界面铣口,可以上下左右移動

sed 's#ti原始內(nèi)容#替換后內(nèi)容#g' ????????g結(jié)尾表示全局替換

| sort | uniq ???????? 去重

sed后面接的動作,務(wù)必以 ‘單引號’ 括起來哦

如果有多個動作觉壶,使用-e分隔 如脑题,nl /etc/passwd | sed -n -e '1,10p' -e '2,5d' -e '6i hello'

補充正則

字符匹配:

.任意單個字符

[]指定范圍的字符

[^]不在指定范圍的字符

次數(shù)匹配:

  • 匹配前面字符0次或者任意次

? 0或1次

  • 1次或多次

{m} 匹配m次

{m,n} 至少m,至多n次

位置:

^ 行首

$ 行尾

^$ 空行

分組:

() 表示一個整體

egrep ‘r(oo)|(at)o‘ 1.txt 匹配roo或者ato

或者:

|

a|b a或b

C|cat C或cat

(C|c)at Cat或cat

部分參考簡書:http://www.reibang.com/p/3ff331ca4180

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铜靶,一起剝皮案震驚了整個濱河市叔遂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌争剿,老刑警劉巖已艰,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蚕苇,居然都是意外死亡哩掺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門涩笤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疮丛,“玉大人,你說我怎么就攤上這事辆它√鼙。” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵锰茉,是天一觀的道長呢蔫。 經(jīng)常有香客問我,道長飒筑,這世上最難降的妖魔是什么片吊? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮协屡,結(jié)果婚禮上俏脊,老公的妹妹穿的比我還像新娘。我一直安慰自己肤晓,他們只是感情好爷贫,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布认然。 她就那樣靜靜地躺著,像睡著了一般漫萄。 火紅的嫁衣襯著肌膚如雪卷员。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天腾务,我揣著相機與錄音毕骡,去河邊找鬼。 笑死岩瘦,一個胖子當著我的面吹牛未巫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播启昧,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼橱赠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了箫津?” 一聲冷哼從身側(cè)響起狭姨,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苏遥,沒想到半個月后饼拍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡田炭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年师抄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片教硫。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡叨吮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瞬矩,到底是詐尸還是另有隱情茶鉴,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布景用,位于F島的核電站涵叮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伞插。R本人自食惡果不足惜割粮,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望媚污。 院中可真熱鬧舀瓢,春花似錦、人聲如沸耗美。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朵锣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甸私,已是汗流浹背诚些。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留皇型,地道東北人诬烹。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像弃鸦,于是被迫代替她去往敵國和親绞吁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

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

  • 能夠仰不愧于天喊积,俯不怍于地烹困。 風光霽月,乾吻,呵呵呵呵
    厚德載物tt閱讀 184評論 0 0
  • The night's silence, like a deep lamp, is burning with th...
    我是嗚嗚閱讀 230評論 0 1
  • 在這個無時無刻都需要溝通的世界髓梅,我們在學習溝通,我們不希望自己采用的溝通方式傷害他人绎签,但往往我們卻無識的使用...
    話梅糖果閱讀 210評論 0 0
  • 鳳姐兒知道鴛鴦等在后面枯饿,趕不上來攙賈母,自己下了轎诡必,忙要上來攙鸭你。可巧有個十二三歲的小道士兒擒权,拿著剪筒照管剪各處蠟花...
    純情小男子閱讀 362評論 0 1