linux shell 學習摘記(4)
《linux shell 指令碼程式設計攻略 (第2版)》 第四章 “讓文字飛起來” 筆記
主要命令:
正規表示式
,grep/egrep
,sed
,awk
,cut
,find
,xargs
,tr
,變數切片
正規表示式 詳細參考
ma(tri)?x
匹配max或matrixOct (1st|2nd)
匹配 Oct 1st 或者 Oct 2nd- 將正規表示式視覺化
grep
grep -E "[a-z]+" filename
和egrep "[a-z]+" filename
;echo this is a line. | egrep -o "[a-z]+\." 只輸出檔案中匹配到的文字部分,
-v`列印出匹配行之外的所有行grep -c "text" filename
統計匹配行的數量,並不是匹配數目;echo -e "1 2 3 4 \nhello\n 6" | egrep -o "[0-9]" | wc -l
grep linux -n XXX
包含匹配字串的行號;grep -b -o "not" XXX
列印模式匹配所位於的字元或位元組偏移grep -l linux sample1.txt sample2.txt
搜尋多個檔案並找出文字位於哪一個檔案中grep "text" . -R -n
遞迴搜尋,-i
忽略大小寫grep -e "pattern" -e "pattern"
匹配多個樣式grep -f pattern_filesource_filename
匹配模式檔案,--include *.{c, cpp}
,--exclude "README"
grep "test" file* -lz | xargs -0 rm
以0值位元組作為終結符的檔案(\0)- 可打匹配結果前後的內容, 如
seq 10 | grep 5 -A 3
匹配某結果之後的3行,-B
匹配某個結果之前的幾行,-C
匹配某個結果之前和之後的幾行
cut -f3 --complement student_data.txt
列印出第3列之外的所有列cut還可將一串指定的字元作為列來顯示
cut fields.txt -c1-3,6-9 --output-delimiter "," 提取第1-3字元為第一列6-9字元為第二列, 以
,為區分, 還可更換引數為
-b按位元組,
-f`用於自定義欄位sed
- sed: Stream Editor 預設情況下sed只會列印替換後的文字,若要同時儲存到原始檔需要
-i
選項,/
在sed為定界符,同樣也可以使用:
,|
- 移除空白行
sed -i "/^$/d" file
sed -i 's/\b[0-9]\{3\}\b/NUMBER/g
file.txt\b
表示檔案邊界sed -i .bak 's/abc/def/' file
sed執行替換時,會穿件一個名為file.bak的原始檔案副本- 已匹配字串標記
$
, `echo this is an example | sed 's/\w+/[&]/g' - 子串匹配標記
(\1)
- 組合多個表示式
sed 'expression' | sed 'expression'
或sed 'expression;expression'
或sed -e 'expression' -e 'expression'
- sed 表示式通常用單引號引用,不過也可以用雙引號(有變數時會很有用)。其會先對錶達式求職然後在進行應用。
sed "s/$text/HELLO/"
- sed: Stream Editor 預設情況下sed只會列印替換後的文字,若要同時儲存到原始檔需要
awk
awk
指令碼被包含在單引號或雙引號之間- 在awk中
print
的引數是以逗號進行分隔的,列印時以空格為定界符,而雙引號被作為拼接符,awk 'BEGIN { begin statements } pattern { commands } END { end statements }'
,awk '{ print 1 "-" 2 "-" 3;}'
,awk '{ print 1,2,3; }'
壓縮或解壓JavaScript 下面是列子,並不能實際用 請依賴專業的工具
- 壓縮
cat sample.js | tr -d '\t\n' | tr -s ' ' | sed 's:/\*.*\*/::g' | sed "s/ \?\([{}();,:]\) \?/\1/g'
- 解壓
cat obfuscated.txt | sed 's/;/;\n/g' | sed 's/{/{\n\n/g' | sed 's/}/\n\n/g'
- 壓縮
按列合併多個檔案
paste file1.txt file2.txt -d ","
列印檔案中的第五列
awk '{ print $5 }' filename
, 列印當前目錄下各個檔案的許可權ls -l | awk '{ print $1 " : " $8 } filename
對目錄中所有的文字進行替換
find . -name *.cpp -print0 | xargs -I{} -0 | sed -i 's/Copyright/Copyleft/g' {}
find . -name *.cpp -exec sed -i 's/Copyright/Copyleft/g' \{\} \;
為每一個超找到的檔案呼叫一次sedfind . -name *.cpp -exec sed -i 's/Copyright/Copyleft/g' \{\} \+
將多個檔名一併傳給sed
切片
[root@share ~]# var=shiwenfeng
[root@share ~]# echo ${var/shi/yes/}
yes/wenfeng
[root@share ~]# echo ${var:4}
enfeng
[root@share ~]# echo ${var:4:2}
en
[root@share ~]# echo ${var:(-1)}
g
[root@share ~]# echo ${var:(-2):2}
ng
[root@share ~]#
相關文章
- linux學習day4——shell指令碼中Linux指令碼
- 【Linux學習筆記29】shell指令碼基礎Linux筆記指令碼
- shell學習總結-4
- shell學習筆記筆記
- Linux學習之(shell展開)Linux
- Linux學習-shell基礎02Linux
- Linux命令和shell指令碼學習Linux指令碼
- linux shell陣列深入學習理解Linux陣列
- 前端學習 linux —— shell 程式設計前端Linux程式設計
- POSIX-shell學習筆記筆記
- 什麼是shell指令碼?Linux為什麼學習shell?指令碼Linux
- Linux學習之路(三)Shell指令碼初探Linux指令碼
- 【學習】Linux Shell指令碼程式設計Linux指令碼程式設計
- shell指令碼學習筆記-1指令碼筆記
- 如何學習shell程式設計?Linux運維學習shell程式設計是什麼程式設計Linux運維
- 4、Linux入門學習筆記 檔案操作命令Linux筆記
- linux學習day3——shell指令碼上Linux指令碼
- MongoDB 學習筆記之常用 shell 命令MongoDB筆記
- shell學習
- Linux 學習筆記Linux筆記
- Linux運維要了解哪些shell技能?Linux學習入門Linux運維
- markdown使用摘記
- swift學習筆記《4》Swift筆記
- python學習筆記4Python筆記
- Java學習筆記4Java筆記
- vue學習筆記4Vue筆記
- FreeRTOS學習隨記-4
- Linux 學習筆記--程式Linux筆記
- shell程式設計學習筆記(二):Shell中變數的使用程式設計筆記變數
- 學習Shell 教程
- Linux基礎學習-Docker學習筆記LinuxDocker筆記
- progit摘錄筆記Git筆記
- 【精通比特幣】摘記比特幣
- VisionPro學習筆記(4)——PatInspect筆記
- C#學習日記4C#
- Webpack4學習筆記Web筆記
- p4 學習筆記筆記
- Linux學習/TCP程式設計學習筆記LinuxTCP程式設計筆記
- linux學習筆記---一些命令學習Linux筆記