日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell 编程(难题分析)

發布時間:2023/12/19 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell 编程(难题分析) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、基礎知識:http://www.aminglinux.com/bbs/thread-6833-1-1.html


一、grep

用grep把passwd文檔中包含'root'或者‘500’的行過濾出來,并在過濾出來的行前面加上行號.

grep -n 'root\|500' passwd


r.o ? ? ? ? ? ? 如r1o,rto都滿足該條件,.表示匹配一個字符,僅僅一個字符

ooo* ? ? ? ? ?如oo,ooo,oooo...都滿足該條件,既表示在*前面的一個字符或者n個都滿足該條件,計算方法oo+0個o,oo+1個o都滿足

r.*t ? ? ? ? ? ?如rjidsjidishdi/: sjht 在r與t之間任意字符都滿足


二、sed的字符位置互換

如將test3:x:505:505::/home/test3:/bin/bash中的test3與bash替換位置,首先需要將這該該段劃分,具體劃分如下

(test3)(:x:505:505::/home/test3:/bin/)(bash)


? ?1 ? ? ? ? ? ? 2 ? ? ? ? ? ? 3 ? ? #通過括號將該段分為3段


(test3) ( ? ? ? ? .* ? ? ? ?) ?(bash) ? #第2段通過.*代替


sed 's/\(test3\)\(.*\)\(bash\)/\3\2\1/' ?文件名 ? ? #替換的方式,“\”表轉意?


bash:x:505:505::/home/test3:/bin/test3 ? ? ? ? ? ? ?#執行后的結果


替換中,如果不加g參數,那么只會把查到的第一個匹配的值進行替換,如語句(root:x:0:0:root:/root:/bin/bash)執行了sed 's/r//' 后,得到如下的語句

oot:x:0:0:root:/root:/bin/bash,那么說明只有第一個r被替換為空,其他的則沒有影響。


2、把/etc/passwd中出現的第一個數字和最后一個單詞替換位置?

原始數據

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

--------------------------------------

?sed '1,$s/\([0-9]\)\(.*\)\([a-z]\)/\3\2\1/g' passwd

-------------------------------------------------------------

root:x:h:0:root:/root:/bin/bas0

bin:x:n:1:bin:/bin:/sbin/nologi1 ? ? #執行的結果是已每一行為一個單位,把出現的第一個數字與最后一個單詞執行了替換。


3、在passwd 20行到末行最前面加 'aaa:'

sed '20,$s/\(.*\)/aaa:\1/' passwd ? ?# “(.*)”表示的就是整個

sed '20,$s/\(.*\)/aaa:&/' passwd ? ?#&代表(.*)的內容

執行后的部分結果

aaa:apache:x:48:48:Apache:/var/www:/sbin/nologin

aaa:rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin

aaa:mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin

aaa:smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin

aaa:webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin


sed的大小寫替換

sed中,使用\u表示大寫,\l表示小寫

1. 把每個單詞的第一個小寫字母變大寫:

sed 's/\b[a-z]/\u&/g' filename

2. 把所有小寫變大寫:

sed 's/[a-z]/\u&/g' filename

3. 大寫變小寫:

sed 's/[A-Z]/\l&/g' filename


三、awk

基礎知識:http://www.aminglinux.com/bbs/thread-6833-1-1.html

截取文檔中的某段 awk -F ':' '{print $1}' 1.txt
也可以使用自定義字符連接每個段 awk -F':' '{print $1"#"$2"#"$3"#"$4}' 1.txt
匹配字符或字符串 awk '/oo/' 1.txt
針對某個段匹配 awk -F ':' '$1 ~/oo/' 1.txt
多次匹配 awk -F ':' '/root/ {print $1,$3}; $1 ~/test/; $3 ~/20/' 1.txt ? #?$1 ~/test/ 表示匹配內容為第一段為test
條件操作符==, >,<,!=,>=;<=??
awk -F ':' '$3=="0"'??1.txt;?
awk -F ':' '$3>="500"' 1.txt;?
awk -F ':' '$7!="/sbin/nologin"'??1.txt;?
awk -F ':' '$3<$4' 1.txt ;?
awk -F ':' '$3>"5" && $3<"7"' 1.txt?
awk -F ':' '$3>"5" || $7=="/bin/bash"' 1.txt
awk內置變量 NF(段數)??NR(行數)
head -n3 1.txt | awk -F ':' '{print NF}'?
head -n3 1.txt | awk -F ':' '{print $NF}'?
head -n3 1.txt | awk -F ':' '{print NR}'?
打印20行以后的行awk 'NR>20' 1.txt
awk -F ':' 'NR>20 && $1 ~ /ssh/'??1.txt?
更改某個段的值awk -F ':' '$1="root"' 1.txt
數學計算, 把第三段和第四段值相加,并賦予第七段 awk -F ':' '{$7=$3+$4; print $0}' 1.txt
計算第三段的總和 awk -F ':' '{(tot=tot+$3)}; END {print tot}' 1.txt
awk中也可以使用if關鍵詞 awk -F ':' '{if ($1=="root") print $0}' 1.txt


用 ':' 作為分隔符,查找第一段為 'root' 的行,并把該段的 'root' 換成 'toor' (可以連同sed一起使用)

awk -F ':' '$1~/root/' passwd | sed 's/root/toor/g' ?#$1~/root/ 表示第一段匹配root的

date +%y-%m-%d ?-d "-5day" :表示5天以前,且格式為%y-%m-%d


變量賦值:a = 1 這是錯誤的,變量的賦值不能有空格,所以賦值方式為:a=1


1.從?a.log?文件中提取包含“WARNING”或”FATAL”,同時不包含“IGNOR”的行,然后,提取以“:”分割的第五個字段?

grep?-E?‘WARNING|FATAL’?a.log?|?grep-v’IGNOR’?|?awk?-F?:?’{print?$5?}’


















轉載于:https://blog.51cto.com/469952080/1687067

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的shell 编程(难题分析)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。