溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

grep,sed,awk 個人總結

發(fā)布時間:2020-08-25 18:45:03 來源:網(wǎng)絡 閱讀:131 作者:深藍L 欄目:系統(tǒng)運維
正則表達式

ifconfig |sed -n '2p' |sed 's.*inet//g' |sed 's#netmask.*$##g'  #用/ # 均可 理論可用任何特殊字符替代 
#sed -r 后面可跟擴展正則  擴展正則  +  (.*)
ifconfig |sed -n 2p |sed -r 's#^.*inet (.*) Broast.*$#\1#g'  # \1 代表正則中的第一個GROUP 即(.*)里的內(nèi)容

ifconfig |sed -nr '2s#^.*inet (.*)net.*$#\1#gp'             #合成一行
ifconfig |awk 'NR==2{print $2}'  #取IP地址   awk 默認分隔符是空格   取IP 最方便 

ifconfig ens33| grep -o "inet [0-9.]*" |grep -o "[0-9.]*" #取IP
ifconfig ens33| sed -nr '2s#^.*inet ([0-9].*)netmask.*$#\1#gp'

cat oldboy.txt| sed -r 's#^ .*inet(.*)netmask(.*)broadcast(.*)$^C1 \2 \3 #g'   

sed -r 's#(.*):(.*):(.*):(.*):(.*):(.*):(.*)$#\7 \6 \5 \4 \3 \2 \1#g'    #后向引用換位置 sed最多引用9個,用awk更方便

sed -n '/^$/d'   #空行刪除   //中寫字符串

sed '1,2s#C#--&-#g'  # 這里&代表C   C 也可以是正則表達式

ls | sed 's#(^.*)haha#mv \1.jpg#g' |bash 

sed '1~2p's #a i d奇數(shù)行
sed '2~2p's #a i d偶數(shù)行

sed 's#^#head#g'  #頭加 
sed 's#$#tail#g' # 尾加

sed 's#^#test#g'   #開頭加test
sed 's#$#test#g'   #末尾加test

sed多行操作  sed '2a,str'  '1~2a,str'  '1,10i,str'   /  '1,2d'  '5~10d'    / '1~3p' '1,3p'
#sed 在 a i d 的時候  必須有相應的行,空文件會出錯,也就是說 空文件無法直接用sed 添加 
sed '/new/d'  # 刪除包含new的行   sed命令中  -n p  sed 中  -n   p    基本都是成對出現(xiàn)

awk -F ":" '{print $1":"$2":"$3":"$4":"$5":"$6":"$7"------"$1}' passwd  #這里是全文操作

awk -F "5:5|28" 'NR==5{print $2}'   #5:5 或 28 作為分隔符 兩個字符串 這種格式最好用|  即使單個字符也用| 否則字符串造成歧義

ll | awk '{if($2>5) print $0}'  $0 表示整行
sed -i 's#pp#dd#g' 1.txt  將1.txt 文件中的pp 改成dd 立即生效  -i 代表直接寫入文件

#在LINUX 中,所有的文本處理 都是讀取一行(進內(nèi)存) 處理一行 輸出一行 直接循環(huán)結束
正則表達式 字符串用"" 以防問題

^.*  以任意字符開頭
.*$  以任意字符結尾
^word 以word 開頭
word$ 以word 結尾
[^word] 括號里的是取反
.     只代表一個字符  "是字符就匹配上了  所有除空行" 空格和空行是不一樣的
\ 轉(zhuǎn)義
*  重復前面0或多個字符
.*    所有
[abc] 匹配集合內(nèi)任意一個字符
[^abc] 匹配集合內(nèi)除abc 的任意一個字符
[0-9]  [a-z] [A-Z]
a\{n,m\} 重復a   至少n次到至多m 次  ##  a\{n,m\} 這種形式必須用""引起來   且""兩邊沒有空格 ,否則會報錯
a\{n,\}  a\{,m\}  a\{n\}重復n次

egrep sed -r 可以不使用\轉(zhuǎn)義

## 了解  擴展正則表達式  grep -E  egrep
+ 一個或一個以上  (*是0或多)
? 0或一個前面字符
| 表示同時過濾多個字符串    egrep "sshd|systemd"
() 后向引用    參考(.*)  \1

grep -n -i 不區(qū)分大小寫  -o 只顯示匹配到的內(nèi)容 不輸出整行

find /test -type f -name "*.sh" |xargs sed -i 's#old#new#g'   ! 嘆號可取反 -a and -o or 
也可同時寫  sed -i 's#old#new#g'  *.sh

#awk
NR  $0整行 $1 $2   $NF最后一列 NF 為全行列數(shù)
$(NF-1)倒數(shù)第二行

#awk原理  一行是一個記錄
#RS表示一個記錄的結束  FS表示一個區(qū)域的分隔 $NF 為最后一個區(qū)域

ifconfig |awk 'BEGIN{RS=":"}''{print $1}'  以:為代替回車 為換行符

#正則 條件(NR==2)  范圍(NR==2,NR==5)2到5
# $1~/正則開始/,$3~/正則結束/

awk -F "[ :]+|\t+" '{print $2}' grade   以1個或多個 :(空格或冒號)或1或多個tab制表符 作為分隔符  

#BEGIN模塊 END模塊
seq 1 100 |awk '{a+=$1}''END{print a}'  1加到100

cat passtemp  |awk '{sub(/x/,"ppp")}''{print $0}'  awk替換

awk '$1~/lisi/{print $0}' grade    grade文件匹配$1 包括lisi的行 并打印出行

awk '$4~/(5|3)$/{print $0}' grade   匹配 5 或 3結尾
awk '$1~/^[l|W]/{print $0}' grade    匹配l 或 W 開頭   用[] 和()都可為了和正則匹配   強烈建議用[]
awk -F "\t" '$3~/^9/{print $0}' grade

#不包含:!,在awk中不包含可以使用! 表示
#在awk中,可以用來替換的有三個函數(shù):sub gsub gensubsub(r, s [, t]) 

               r  /找誰/

               s  "替換成什么"

               [] 替換那個部分的

awk '$1~/zhan/{gsub(/zhang3/,"ccccc",$1);print $0}' grade
##注意  /zhang3/  "ccccc"   以及多個命令間用;  分號
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI