Linux系列shell編程之文檔操作(2)

      網友投稿 949 2022-05-29

      1、grep命令

      注:一種強大的文本搜索工具,【可以搜索流和文件行】,支持使用正則表達式搜索文本,并把匹配的行統計出來。

      常用參數: -c:統計符合條件的字符串出現的總行數。 -E:支持擴展正則表達式。 -i:忽略字符大小寫。 -n:在顯示匹配到的字符串前面加上行號。 -v:顯示沒有”搜索字符串”內容的那一行。 -l:列出文件內容中有搜索字符串的文件名稱。 -o:只輸出文件中匹配到的部分。 -color=auto:將匹配到的字符串高亮出來。

      # 有兩種寫法 # 第一種寫法 # 注:這個只能是搜索文件中的指定字符。如果是文件夾則會報錯 grep 字符 文件:從文件中搜索并打印找到行。 # 第二種寫法:常用是這種 文件/文件夾 | grep 字符:從流中獲取并輸出找到的行。

      第二種寫法,舉例如下:

      # 最好是配合"-i"使用,忽略大小寫。 [hadoop@image1 shell]$ ls a.sh b.txt compare.sh file.sh if-elif-else.sh list1.sh services.sh test.sh uni.sh while.sh a.txt cacul.sh c.txt func1.sh if-else.sh list.sh sort.txt three.sh until.sh bool.sh case.sh cut.txt func2.sh if.sh read.sh str.sh uniq.txt wc.txt # 查找某一個指定文件 [hadoop@image1 shell]$ ll | grep a.txt -rw-rw-r--. 1 hadoop hadoop 10 Oct 25 12:41 a.txt # 查看某一個指定進程 [hadoop@image1 shell]$ ps aux | grep sshd root 2225 0.0 0.0 66260 1208 ? Ss 09:32 0:00 /usr/sbin/sshd root 2464 0.0 0.2 102104 4048 ? Ss 09:32 0:00 sshd: hadoop [priv] hadoop 2468 0.0 0.0 102104 1896 ? R 09:32 0:01 sshd: hadoop@pts/0 hadoop 3495 0.0 0.0 103336 848 pts/0 S+ 13:39 0:00 grep sshd # 查看是否安裝了某一個指定的軟件 [hadoop@image1 shell]$ rpm -qa | grep -i jdk

      注:這里不好舉例,自己下去慢慢看,不是太難。

      2、find命令功能:搜索文件目錄層次結構

      常用可選項: -name 根據文件名查找,支持('* ' , '? ') -type 根據文件類型查找(f-普通文件,c-字符設備文件,b-塊設備文件,l-鏈接文件,d-目錄) -perm 根據文件的權限查找,比如 755 -user 根據文件擁有者查找 -group 根據文件所屬組尋找文件 -size 根據文件小大尋找文件 -o 表達式 或 -a 表達式 與 -not 表達式 非

      操作如下:

      ## 準備的測試文件 [hadoop@image1 txt]$ ll total 248 -rw-rw-r--. 1 hadoop hadoop 235373 Apr 18 00:10 hw.txt -rw-rw-r--. 1 hadoop hadoop 0 Apr 22 05:43 HADOOP.pdf -rw-rw-r--. 1 hadoop hadoop 3 Apr 22 05:50 liujialing.jpg -rw-rw-r--. 1 hadoop hadoop 0 Apr 22 05:43 mingxing.pdf -rw-rw-r--. 1 hadoop hadoop 57 Apr 22 04:40 mingxing.txt -rw-rw-r--. 1 hadoop hadoop 66 Apr 22 05:15 sort.txt -rw-rw-r--. 1 hadoop hadoop 214 Apr 18 10:08 test.txt -rw-rw-r--. 1 hadoop hadoop 24 Apr 22 05:27 uniq.txt ## 1、查找文件名txt結尾的文件 find /home/hadoop/txt/ -name "*.txt" /home/hadoop/txt/uniq.txt /home/hadoop/txt/mingxing.txt /home/hadoop/txt/test.txt /home/hadoop/txt/hw.txt /home/hadoop/txt/sort.txt ## 2、忽略大小寫,查找文件名包含hadoop find /home/hadoop/txt -iname "*hadoop*" /home/hadoop/txt/HADOOP.pdf ## 3、查找文件名結尾是.txt或者.jpg的文件 find /home/hadoop/txt/ \( -name "*.txt" -o -name "*.jpg" \) /home/hadoop/txt/liujialing.jpg /home/hadoop/txt/uniq.txt /home/hadoop/txt/mingxing.txt /home/hadoop/txt/test.txt /home/hadoop/txt/hw.txt /home/hadoop/txt/sort.txt 另一種寫法: find /home/hadoop/txt/ -name "*.txt" -o -name "*.jpg" ## 4、使用正則表達式的方式,去查找上面條件的文件 find /home/hadoop/txt/ -regex ".*\(\.txt\|\.jpg\)$" /home/hadoop/txt/liujialing.jpg /home/hadoop/txt/uniq.txt /home/hadoop/txt/mingxing.txt /home/hadoop/txt/test.txt /home/hadoop/txt/hw.txt /home/hadoop/txt/sort.txt ## 5、查找.jpg結尾的文件,然后刪掉 find /home/hadoop/txt -type f -name "*.jpg" -delete [hadoop@hadoop txt]$ ll total 248 -rw-rw-r--. 1 hadoop hadoop 235373 Apr 18 00:10 hw.txt -rw-rw-r--. 1 hadoop hadoop 0 Apr 22 05:43 HADOOP.pdf -rw-rw-r--. 1 hadoop hadoop 0 Apr 22 05:43 mingxing.pdf -rw-rw-r--. 1 hadoop hadoop 57 Apr 22 04:40 mingxing.txt -rw-rw-r--. 1 hadoop hadoop 66 Apr 22 05:15 sort.txt -rw-rw-r--. 1 hadoop hadoop 214 Apr 18 10:08 test.txt -rw-rw-r--. 1 hadoop hadoop 24 Apr 22 05:27 uniq.txt

      3、shell操作字符串

      linux中操作字符串,也是一項必備的技能。其中尤以截取字符串更加頻繁 下面為大家介紹幾種常用方式,截取字符串。

      預先定義一個變量:website=“http://hadoop//centos/huangbo.html”

      [hadoop@image1 ~]$ website="http://hadoop//centos/huangbo.html"

      #截取,刪除左邊字符串(包括制定的分隔符),保留右邊字符串

      [hadoop@image1 ~]# echo ${website#*//} 結果:hadoop//centos/huangbo.html

      ##截取,刪除左邊字符串(包括指定的分隔符),保留右邊字符串,和上邊一個#不同的是,它一直從左找到最后,而不是像一個#那樣找到一個就滿足條件退出了。

      [hadoop@image1 ~]# echo ${website##*//} 結果:centos/huangbo.html

      %截取,刪除右邊字符串(包括制定的分隔符),保留左邊字符串

      [hadoop@image1 ~]# echo ${website%//*} 結果:http://hadoop

      %%截取,刪除右邊字符串(包括指定的分隔符),保留左邊字符串,和上邊一個%不同的是,它一直從右找到最前,而不是像一個%那樣找到一個就滿足條件退出了。

      [hadoop@image1 ~]# echo ${website%%//*} 結果:http:

      總結以上四種方式:

      # 去掉左邊,最短匹配模式, ##最長匹配模式。 % 去掉右邊,最短匹配模式, %%最長匹配模式。 注意:他們兩個的寫法還有點不同。 去掉左邊,使用的是#,同時*在字符左邊; 去掉右邊,使用的是%,同時*在字符右邊;

      預先定義一個變量:website=“http://hadoop//centos/huangbo.html”

      [hadoop@image1 ~]$ website="http://hadoop//centos/huangbo.html"

      從左邊第幾個字符開始,以及截取的字符的個數。

      [hadoop@image1 ~]# echo ${website:2:2} tp

      從左邊第幾個字符開始,一直到結束。

      [hadoop@image1 ~]# echo ${website:2} tp://hadoop//centos//huangbo.html

      從右邊第幾個字符開始,以及字符的個數。

      [hadoop@image1 ~]# echo ${website:0-4:2} ht

      從右邊第幾個字符開始,一直到結束。

      [hadoop@image1 ~]# echo ${website:0-4} html

      預先定義一個變量:website=“http://hadoop//centos/huangbo.html”

      [hadoop@image1 ~]$ website="http://hadoop//centos/huangbo.html"

      利用awk進行字符串截取。

      Linux系列:shell編程之文檔操作(2)

      [hadoop@image1 ~]# echo $website | awk '{print substr(,2,6)}' ttp://

      利用cut進行字符串截取。

      [hadoop@image1 ~]# echo $website | cut -b 1-4 http [hadoop@image1 ~]# echo $website | cut -c 1-4 http [hadoop@image1 ~]# echo $website | cut -b 1,4 hp [hadoop@image1 ~]# echo $website | cut -c 1,4 hp

      獲取最后幾個字符。

      [hadoop@image1 ~]# echo ${website:(-3)} tml

      截取從倒數第3個字符后的2個字符。

      [hadoop@image1 ~]# echo ${website:(-3):2} tm

      # 使用格式 ${parameter/pattern/string}

      操作如下:

      # 定義變量VAR: [hadoop@image1 ~]# var="hello tom, hello kitty, hello xiaoming" # 替換第一個hello [hadoop@image1 ~]# echo ${var/hello/hi} hi tom, hello kitty, hello xiaoming # 替換所有hello [hadoop@image1 ~]# echo ${var//hello/hi} hi tom, hi kitty, hi xiaoming

      在此為大家提供五種方式獲取某字符串的長度。

      預先定義一個變量:website=“http://hadoop//centos/huangbo.html”

      [hadoop@image1 ~]$ website="http://hadoop//centos/huangbo.html"

      [hadoop@image1 ~]$ echo ${#website} 35

      [hadoop@image1 ~]$ echo ${website} | wc -L 35

      [hadoop@image1 ~]$ expr length ${website} 35

      [hadoop@image1 ~]$ echo ${website} | awk '{print length($0)}' 35

      [hadoop@image1 ~]$ echo ${website} | awk -F "" '{print NF}' 35

      4、sed命令功能

      5、awk命令功能

      # 語法格式如下:$1表示獲取第一列,依次往后。 # 注意:下面一定是單引號,不能是雙引號。 查找的結果 | awk -F分隔符 'print $1'

      操作如下:

      [hadoop@image1 ~]# cat /etc/passwd | awk -F ':' '{print $1}' root bin daemon adm lp [hadoop@image1 ~]# cat /etc/passwd | awk -F ':' '{print $1"\t"$7}' root /bin/bash bin /sbin/nologin daemon /sbin/nologin adm /sbin/nologin lp /sbin/nologin [hadoop@image1 ~]# cat /etc/passwd | awk -F ':' '{print $1","$7}' root,/bin/bash bin,/sbin/nologin daemon,/sbin/nologin adm,/sbin/nologin lp,/sbin/nologin [hadoop@image1 ~]# cat /etc/passwd | awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}' name,shell root,/bin/bash bin,/sbin/nologin daemon,/sbin/nologin adm,/sbin/nologin lp,/sbin/nologin blue,/bin/nosh

      注:sed和awk用法,自己下去看看,不太好寫筆記。

      Linux Shell

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Linux系列:shell編程之文檔操作(3)
      下一篇:Linux系列:shell編程之文檔操作(1)
      相關文章
      亚洲国产日韩在线观频| 亚洲国产一区二区三区在线观看| 久久亚洲中文无码咪咪爱| 亚洲剧场午夜在线观看| 亚洲综合网美国十次| 久久综合亚洲鲁鲁五月天| 久久久久亚洲精品无码系列| 亚洲色大成网站WWW久久九九| 久久精品国产亚洲一区二区三区| 亚洲精品国产精品乱码不卡| 亚洲一区二区三区国产精品| 亚洲日本中文字幕天堂网| 亚洲午夜av影院| 久久久无码精品亚洲日韩软件| 亚洲国产精品自在拍在线播放| 亚洲国产成人精品女人久久久 | 亚洲av日韩av永久在线观看| 亚洲私人无码综合久久网| 亚洲乱人伦中文字幕无码| 亚洲欧美日韩中文二区| 亚洲Av无码国产一区二区| 亚洲第一区在线观看| 亚洲天堂中文字幕在线| 国产成人精品日本亚洲专区61| 国产AV无码专区亚洲AV毛网站| 亚洲成AV人片在线观看| 亚洲最新永久在线观看| 亚洲成AV人综合在线观看| 亚洲影视一区二区| 亚洲AV男人的天堂在线观看| 亚洲熟妇AV日韩熟妇在线| jzzijzzij在线观看亚洲熟妇| 亚洲国产精品综合久久一线| 国产亚洲精品无码拍拍拍色欲| 亚洲V无码一区二区三区四区观看| 亚洲卡一卡2卡三卡4卡无卡三| 亚洲国产精品张柏芝在线观看| 亚洲欧洲日本在线观看| 日韩国产欧美亚洲v片| 亚洲一区二区三区在线视频| 亚洲乱码日产一区三区|