中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

shell awk sed tr grep 語法匯總

發布時間:2020-05-23 15:28:02 來源:網絡 閱讀:15544 作者:a591244761 欄目:系統運維

tr 基本語法

  -c          # 用字符串1中字符集的補集替換此字符集,要求字符集為ASCII
  -d          # 刪除字符串1中所有輸入字符
  -s          # 刪除所有重復出現字符序列,只保留第一個:即將重復出現字符串壓縮為一個字符串
  [a-z]       # a-z內的字符組成的字符串
  [A-Z]       # A-Z內的字符組成的字符串
  [0-9]       # 數字串
  \octal      # 一個三位的八進制數,對應有效的ASCII字符
  [O*n]       # 表示字符O重復出現指定次數n。因此[O*2]匹配OO的字符串 

 tr中特定控制字符表達方式
   \a Ctrl-G    \007    # 鈴聲
   \b Ctrl-H    \010    # 退格符
   \f Ctrl-L    \014    # 走行換頁
   \n Ctrl-J    \012    # 新行
   \r Ctrl-M    \015    # 回車
   \t Ctrl-I    \011    # tab鍵
   \v Ctrl-X    \030
  tr A-Z a-z                             # 將所有大寫轉換成小寫字母
  tr " " "\n"                            # 將空格替換為換行
  tr -s "[\012]" < plan.txt              # 刪除空行
  tr -s ["\n"] < plan.txt                # 刪除空行
  tr -s "[\015]" "[\n]" < file           # 刪除文件中的^M,并代之以換行
  tr -s "[\r]" "[\n]" < file             # 刪除文件中的^M,并代之以換行
  tr -s "[:]" "[\011]" < /etc/passwd     # 替換passwd文件中所有冒號,代之以tab鍵
  tr -s "[:]" "[\t]" < /etc/passwd       # 替換passwd文件中所有冒號,代之以tab鍵
  echo $PATH | tr ":" "\n"               # 增加顯示路徑可讀性
  1,$!tr -d '\t'                         # tr在vi內使用,在tr前加處理行范圍和感嘆號('$'表示最后一行)
  tr "\r" "\n"<macfile > unixfile        # Mac -> UNIX
  tr "\n" "\r"<unixfile > macfile        # UNIX -> Mac
  tr -d "\r"<dosfile > unixfile          # DOS -> UNIX  Microsoft DOS/Windows 約定,文本的每行以回車字符(\r)并后跟換行符(\n)結束
  awk '{ print $0"\r" }'<unixfile > dosfile   # UNIX -> DOS:在這種情況下,需要用awk,因為tr不能插入兩個字符來替換一個字符
  #!/bin/sh         # 在腳本第一行腳本頭 # sh為當前系統默認shell,可指定為bash等shell
 sh -x             # 執行過程
 sh -n             # 檢查語法
 (a=bbk)           # 括號創建子shell運行
 basename $0       # 從文件名中去掉路徑和擴展名
 dirname           # 取路徑
 $RANDOM           # 隨機數
 $$                # 進程號
 source FileName   # 在當前bash環境下讀取并執行FileName中的命令  # 等同 . FileName
 sleep 5           # 間隔睡眠5秒
 trap              # 在接收到信號后將要采取的行動
 trap "" 2 3       # 禁止ctrl+c
 $PWD              # 當前目錄
 $HOME             # 家目錄
 $OLDPWD           # 之前一個目錄的路徑
 cd -              # 返回上一個目錄路徑
 yes               # 重復打印
 yes |rm -i *      # 自動回答y或者其他
 ls -p /home       # 查看目錄所有文件夾
 ls -d /home/      # 查看匹配完整路徑
 echo -n aa;echo bb                    # 不換行執行下一句話
 echo -e "s\tss\n\n\n"                 # 使轉義生效
 echo $a | cut -c2-6                   # 取字符串中字元
 echo {a,b,c}{a,b,c}{a,b,c}            # 排列組合(括號內一個元素分別和其他括號內元素組合)
 echo $((2#11010))                     # 二進制轉10進制
 echo aaa | tee file                   # 打印同時寫入文件 默認覆蓋 -a追加
 echo {1..10}                          # 打印10個字符
 printf '%10s\n'|tr " " a              # 打印10個字符
 pwd | awk -F/ '{ print $2 }'          # 返回目錄名
 tac file |sed 1,3d|tac                # 倒置讀取文件  # 刪除最后3行
 tail -3 file                          # 取最后3行
 outtmp=/tmp/$$`date +%s%N`.outtmp     # 臨時文件定義
 :(){ :|:& };:                         # 著名的 fork×××,系統執行海量的進程,直到系統僵死
 echo -e "\033[0;31mL\033[0;32mO\033[0;33mV\033[0;34mE\t\033[0;35mY\033[0;36mO\033[0;32mU\e[m"    # 打印顏色
seq 語法1
# 不指定起始數值,則默認為 1
-s   # 選項主要改變輸出的分格符, 預設是 \n
-w   # 等位補全,就是寬度相等,不足的前面補 0
-f   # 格式化輸出,就是指定打印的格式
seq 10 100               # 列出10-100
seq 1 10 |tac            # 倒敘列出
seq -s '+' 90 100 |bc    # 從90加到100
seq -f 'dir%g' 1 10 | xargs mkdir     # 創建dir1-10
seq -f 'dir%03g' 1 10 | xargs mkdir   # 創建dir001-010

                sed 
                sed 10q                                       # 顯示文件中的前10行 (模擬"head")
  sed -n '$='                                   # 計算行數(模擬 "wc -l")
  sed -n '5,/^no/p'                             # 打印從第5行到以no開頭行之間的所有行
  sed -i "/^$f/d" a                          # 刪除匹配行
  sed -i '/aaa/,$d'                             # 刪除匹配行到末尾
  sed -i "s/=/:/" c                             # 直接對文本替換
  sed -i "/^pearls/s/$/j/"                      # 找到pearls開頭在行尾加j
  sed '/1/,/3/p' file                           # 打印1和3之間的行
  sed -n '1p' 文件                              # 取出指定行
  sed '5i\aaa' file                             # 在第5行之前插入行
  sed '5a\aaa' file                             # 在第5行之后抽入行
  echo a|sed -e '/a/i\b'                        # 在匹配行前插入一行
  echo a|sed -e '/a/a\b'                        # 在匹配行后插入一行
  echo a|sed 's/a/&\nb/g'                       # 在匹配行后插入一行
  seq 10| sed -e{1,3}'s/./a/'                   # 匹配1和3行替換
  sed -n '/regexp/!p'                           # 只顯示不匹配正則表達式的行
  sed '/regexp/d'                               # 只顯示不匹配正則表達式的行
  sed '$!N;s/\n//'                              # 將每兩行連接成一行
  sed '/baz/s/foo/bar/g'                        # 只在行中出現字串"baz"的情況下將"foo"替換成"bar" 
  sed '/baz/!s/foo/bar/g'                       # 將"foo"替換成"bar",并且只在行中未出現字串"baz"的情況下替換
  echo a|sed -e 's/a/#&/g'                      # 在a前面加#號
  sed 's/foo/bar/4'                             # 只替換每一行中的第四個字串
  sed 's/\(.*\)foo/\1bar/'                      # 替換每行最后一個字符串
  sed 's/\(.*\)foo\(.*foo\)/\1bar\2/'           # 替換倒數第二個字符串
  sed 's/[0-9][0-9]$/&5'                        # 在以[0-9][0-9]結尾的行后加5
  sed -n ' /^eth\|em[01][^:]/{n;p;}'            # 匹配多個關鍵字
  sed -n -r ' /eth|em[01][^:]/{n;p;}'           # 匹配多個關鍵字
  echo -e "1\n2"|xargs -i -t sed 's/^/1/' {}    # 同時處理多個文件
  sed '/west/,/east/s/$/*VACA*/'                # 修改west和east之間的所有行,在結尾處加*VACA*
  sed  's/[^1-9]*\([0-9]\+\).*/\1/'             # 取出第一組數字,并且忽略掉開頭的0
  sed -n '/regexp/{g;1!p;};h'                   # 查找字符串并將匹配行的上一行顯示出來,但并不顯示匹配行
  sed -n ' /regexp/{n;p;}'                      # 查找字符串并將匹配行的下一行顯示出來,但并不顯示匹配行
  sed -n 's/\(mar\)got/\1ianne/p'               # 保存\(mar\)作為標簽1
  sed -n 's/\([0-9]\+\).*\(t\)/\2\1/p'          # 保存多個標簽
  sed -i -e '1,3d' -e 's/1/2/'                  # 多重編輯(先刪除1-3行,在將1替換成2)
  sed -e 's/@.*//g' -e '/^$/d'                  # 刪除掉@后面所有字符,和空行
  sed -n -e "{s/文本(正則)/替換的內容/p}"       # 替換并打印出替換行
  sed -n -e "{s/^ *[0-9]*//p}"                  # 打印并刪除正則表達式的那部分內容
  echo abcd|sed 'y/bd/BE/'                      # 匹配字符替換
  sed '/^#/b;y/y/P/' 2                          # 非#號開頭的行替換字符
  sed '/suan/r 讀入文件'                        # 找到含suan的行,在后面加上讀入的文件內容
  sed -n '/no/w 寫入文件'                       # 找到含no的行,寫入到指定文件中
  sed '/regex/G'                                # 在匹配式樣行之后插入一空行
  sed '/regex/{x;p;x;G;}'                       # 在匹配式樣行之前和之后各插入一空行
  sed 'n;d'                                     # 刪除所有偶數行
  sed 'G;G'                                     # 在每一行后面增加兩空行
  sed '/^$/d;G'                                 # 在輸出的文本中每一行后面將有且只有一空行
  sed 'n;n;n;n;G;'                              # 在每5行后增加一空白行
  sed -n '5~5p'                                 # 只打印行號為5的倍數
  seq 1 30|sed  '5~5s/.*/a/'                    # 倍數行執行替換
  sed -n '3,${p;n;n;n;n;n;n;}'                  # 從第3行開始,每7行顯示一次
  sed -n 'h;n;G;p'                              # 奇偶調換
  seq 1 10|sed '1!G;h;$!d'                      # 倒敘排列
  ls -l|sed -n '/^.rwx.*/p'                     # 查找屬主權限為7的文件
  sed = filename | sed 'N;s/\n/\t/'             # 為文件中的每一行進行編號(簡單的左對齊方式)
  sed 's/^[ \t]*//'                             # 將每一行前導的"空白字符"(空格,制表符)刪除,使之左對齊 
  sed 's/^[ \t]*//;s/[ \t]*$//'                 # 將每一行中的前導和拖尾的空白字符刪除
  echo abcd\\nabcde |sed 's/\\n/@/g' |tr '@' '\n'        # 將換行符轉換為換行
  cat tmp|awk '{print $1}'|sort -n|sed -n '$p'           # 取一列最大值
  sed -n '{s/^[^\/]*//;s/\:.*//;p}' /etc/passwd          # 取用戶家目錄(匹配不為/的字符和匹配:到結尾的字符全部刪除)
  sed = filename | sed 'N;s/^/      /; s/ *\(.\{6,\}\)\n/\1   /'   # 對文件中的所有行編號(行號在左,文字右端對齊)
  /sbin/ifconfig |sed 's/.*inet addr:\(.*\) Bca.*/\1/g' |sed -n '/eth/{n;p}'   # 取所有IP
  修改keepalive配置剔除后端服務器
   sed -i '/real_server.*10.0.1.158.*8888/,+8 s/^/#/' keepalived.conf
   sed -i '/real_server.*10.0.1.158.*8888/,+8 s/^#//' keepalived.conf


  模仿rev功能
   echo 123 |sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//;'
   /\n/!G;               # 沒有\n換行符,要執行G,因為保留空間中為空,所以在模式空間追加一空行
   s/\(.\)\(.*\n\)/&\2\1/;     # 標簽替換 &\n23\n1$ (關鍵在于& ,可以讓后面//匹配到空行)
   //D;                  # D 命令會引起循環刪除模式空間中的第一部分,如果刪除后,模式空間中還有剩余行,則返回 D 之前的命令,重新執行,如果 D 后,模式空間中沒有任何內容,則將退出。 
    //D 匹配空行執行D,如果上句s沒有匹配到,//也無法匹配到空行, "//D;"命令結束
   s/.//;                # D結束后,刪除開頭的 \n
awk判斷
   awk '{print ($1>$2)?"第一排"$1:"第二排"$2}'      # 條件判斷 括號代表if語句判斷 "?"代表then ":"代表else
   awk '{max=($1>$2)? $1 : $2; print max}'          # 條件判斷 如果$1大于$2,max值為為$1,否則為$2
   awk '{if ( $6 > 50) print $1 " Too high" ;\
   else print "Range is OK"}' file
   awk '{if ( $6 > 50) { count++;print $3 } \
   else { x+5; print $2 } }' file
awk循環
  awk '{i = 1; while ( i <= NF ) { print NF, $i ; i++ } }' file
  awk '{ for ( i = 1; i <= NF; i++ ) print NF,$i }' file


  awk '/Tom/' file               # 打印匹配到得行
  awk '/^Tom/{print $1}'         # 匹配Tom開頭的行 打印第一個字段
  awk '$1 !~ /ly$/'              # 顯示所有第一個字段不是以ly結尾的行
  awk '$3 <40'                   # 如果第三個字段值小于40才打印
  awk '$4==90{print $5}'         # 取出第四列等于90的第五列
  awk '/^(no|so)/' test          # 打印所有以模式no或so開頭的行
  awk '$3 * $4 > 500'            # 算術運算(第三個字段和第四個字段乘積大于500則顯示)
  awk '{print NR" "$0}'          # 加行號
  awk '/tom/,/suz/'              # 打印tom到suz之間的行
  awk '{a+=$1}END{print a}'      # 列求和
  awk 'sum+=$1{print sum}'       # 將$1的值疊加后賦給sum
  awk '{a+=$1}END{print a/NR}'   # 列求平均值
  awk -F'[ :\t]' '{print $1,$2}'           # 以空格、:、制表符Tab為分隔符
  awk '{print "'"$a"'","'"$b"'"}'          # 引用外部變量
  awk '{if(NR==52){print;exit}}'           # 顯示第52行
  awk '/關鍵字/{a=NR+2}a==NR {print}'      # 取關鍵字下第幾行
  awk 'gsub(/liu/,"aaaa",$1){print $0}'    # 只打印匹配替換后的行
  ll | awk -F'[ ]+|[ ][ ]+' '/^$/{print $8}'             # 提取時間,空格不固定
  awk '{$1="";$2="";$3="";print}'                        # 去掉前三列
  echo aada:aba|awk '/d/||/b/{print}'                    # 匹配兩內容之一
  echo aada:abaa|awk -F: '$1~/d/||$2~/b/{print}'         # 關鍵列匹配兩內容之一
  echo Ma asdas|awk '$1~/^[a-Z][a-Z]$/{print }'          # 第一個域匹配正則
  echo aada:aaba|awk '/d/&&/b/{print}'                   # 同時匹配兩條件
  awk 'length($1)=="4"{print $1}'                        # 字符串位數
  awk '{if($2>3){system ("touch "$1)}}'                  # 執行系統命令
  awk '{sub(/Mac/,"Macintosh",$0);print}'                # 用Macintosh替換Mac
  awk '{gsub(/Mac/,"MacIntosh",$1); print}'              # 第一個域內用Macintosh替換Mac
  awk -F '' '{ for(i=1;i<NF+1;i++)a+=$i  ;print a}'      # 多位數算出其每位數的總和.比如 1234, 得到 10
  awk '{ i=$1%10;if ( i == 0 ) {print i}}'               # 判斷$1是否整除(awk中定義變量引用時不能帶 $ )
  awk 'BEGIN{a=0}{if ($1>a) a=$1 fi}END{print a}'        # 列求最大值  設定一個變量開始為0,遇到比該數大的值,就賦值給該變量,直到結束
  awk 'BEGIN{a=11111}{if ($1<a) a=$1 fi}END{print a}'    # 求最小值
  awk '{if(A)print;A=0}/regexp/{A=1}'                    # 查找字符串并將匹配行的下一行顯示出來,但并不顯示匹配行
  awk '/regexp/{print A}{A=$0}'                          # 查找字符串并將匹配行的上一行顯示出來,但并不顯示匹配行
  awk '{if(!/mysql/)gsub(/1/,"a");print $0}'             # 將1替換成a,并且只在行中未出現字串mysql的情況下替換
  awk 'BEGIN{srand();fr=int(100*rand());print fr;}'      # 獲取隨機數
  awk '{if(NR==3)F=1}{if(F){i++;if(i%7==1)print}}'       # 從第3行開始,每7行顯示一次
  awk '{if(NF<1){print i;i=0} else {i++;print $0}}'      # 顯示空行分割各段的行數
  echo +null:null  |awk -F: '$1!~"^+"&&$2!="null"{print $0}'       # 關鍵列同時匹配
  awk -v RS=@ 'NF{for(i=1;i<=NF;i++)if($i) printf $i;print ""}'    # 指定記錄分隔符
  awk '{b[$1]=b[$1]$2}END{for(i in b){print i,b[i]}}'              # 列疊加
  awk '{ i=($1%100);if ( $i >= 0 ) {print $0,$i}}'                 # 求余數
  awk '{b=a;a=$1; if(NR>1){print a-b}}'                            # 當前行減上一行
  awk '{a[NR]=$1}END{for (i=1;i<=NR;i++){print a[i]-a[i-1]}}'      # 當前行減上一行
  awk -F: '{name[x++]=$1};END{for(i=0;i<NR;i++)print i,name[i]}'   # END只打印最后的結果,END塊里面處理數組內容
  awk '{sum2+=$2;count=count+1}END{print sum2,sum2/count}'         # $2的總和  $2總和除個數(平均值)
  awk 'BEGIN{ "date" | getline d; split(d,mon) ; print mon[2]}' file        # 將date值賦給d,并將d設置為數組mon,打印mon數組中第2個元素
  awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'      # 截取字符串(substr使用)
  awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}'      # 匹配字符串(index使用)
  awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}'    # 正則表達式匹配查找(match使用)
  awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}'    # 字符串分割(split使用)
  awk '{for(i=1;i<=4;i++)printf $i""FS; for(y=10;y<=13;y++)  printf $y""FS;print ""}'        # 打印前4列和后4列
  awk  '{for(i=1;i<=NF;i++) a[i,NR]=$i}END{for(i=1;i<=NF;i++) {for(j=1;j<=NR;j++) printf a[i,j] " ";print ""}}'   # 將多行轉多列
  awk 'BEGIN{printf "what is your name?";getline name < "/dev/tty" } $1 ~name {print "FOUND" name " on line ", NR "."} END{print "see you," name "."}' file  # 兩文件匹配
  cat 1.txt|awk -F" # " '{print "insert into user (user,password,email)values(""'\''"$1"'\'\,'""'\''"$2"'\'\,'""'\''"$3"'\'\)\;'"}' >>insert_1.txt     # 處理sql語句

取本機IP
  /sbin/ifconfig |awk -v RS="Bcast:" '{print $NF}'|awk -F: '/addr/{print $2}'
  /sbin/ifconfig |awk -v RS='inet addr:' '$1!="eth0"&&$1!="127.0.0.1"{print $1}'|awk '{printf"%s|",$0}'
  /sbin/ifconfig |awk  '{printf("line %d,%s\n",NR,$0)}'         # 指定類型(%d數字,%s字符)

查看磁盤空間
   df -h|awk -F"[ ]+|%" '$5>14{print $5}'
   df -h|awk 'NR!=1{if ( NF == 6 ) {print $5} else if ( NF == 5) {print $4} }' 
   df -h|awk 'NR!=1 && /%/{sub(/%/,"");print $(NF-1)}'
   df -h|sed '1d;/ /!N;s/\n//;s/ \+/ /;'    #將磁盤分區整理成一行   可直接用 df -P
排列打印
   awk 'END{printf "%-10s%-10s\n%-10s%-10s\n%-10s%-10s\n","server","name","123","12345","234","1234"}' txt
   awk 'BEGIN{printf "|%-10s|%-10s|\n|%-10s|%-10s|\n|%-10s|%-10s|\n","server","name","123","12345","234","1234"}'
   awk 'BEGIN{
   print "   *** 開 始 ***   ";
   print "+-----------------+";
   printf "|%-5s|%-5s|%-5s|\n","id","name","ip";
   }
   $1!=1 && NF==4{printf "|%-5s|%-5s|%-5s|\n",$1,$2,$3" "$11}
   END{
   print "+-----------------+";
   print "   *** 結 束 ***   "
   }' txt
老男孩awk經典題
   分析圖片服務日志,把日志(每個圖片訪問次數*圖片大小的總和)排行,也就是計算每個url的總訪問大小
   說明:本題生產環境應用:這個功能可以用于IDC網站流量帶寬很高,然后通過分析服務器日志哪些元素占用流量過大,進而進行優化或裁剪該圖片,壓縮js等措施。
   本題需要輸出三個指標: 【被訪問次數】    【訪問次數*單個被訪問文件大小】   【文件名(帶URL)】
   測試數據
   59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/p_w_picpaths/photos/2.jpg HTTP/1.1" 200 11299 
   awk '{array_num[$7]++;array_size[$7]+=$10}END{for(i in array_num) {print array_num[i]" "array_size[i]" "i}}'

awk練習題
   wang     4
   cui      3
   zhao     4
   liu      3
   liu      3
   chang    5
   li       2
   1 通過第一個域找出字符長度為4的
   2 當第二列值大于3時,創建空白文件,文件名為當前行第一個域$1 (touch $1)
   3 將文檔中 liu 字符串替換為 hong
   4 求第二列的和
   5 求第二列的平均值
   6 求第二列中的最大值
   7 將第一列過濾重復后,列出每一項,每一項的出現次數,每一項的大小總和
   1、字符串長度
    awk 'length($1)=="4"{print $1}'
   2、執行系統命令
    awk '{if($2>3){system ("touch "$1)}}'
   3、gsub(/r/,"s",域) 在指定域(默認$0)中用s替代r  (sed 's///g')
    awk '{gsub(/liu/,"hong",$1);print $0}' a.txt
   4、列求和
    df -h | awk '{a+=$2}END{print a}'
   5、列求平均值
    df -h | awk '{a+=$2}END{print a/NR}'
    df -h | awk '{a+=$2;b++}END{print a,a/b}' 
   6、列求最大值
    df -h | awk 'BEGIN{a=0}{if($2>a) a=$2 }END{print a}'
   7、將第一列過濾重復列出每一項,每一項的出現次數,每一項的大小總和
    awk '{a[$1]++;b[$1]+=$2}END{for(i in a){print i,a[i],b[i]}}'
  }

 

向AI問一下細節

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

AI

建始县| 洪洞县| 洛隆县| 奉贤区| 密山市| 吴旗县| 固安县| 罗山县| 盐山县| 来安县| 焉耆| 民县| 嘉峪关市| 利津县| 泽普县| 阳泉市| 大丰市| 十堰市| 黎平县| 榕江县| 百色市| 新余市| 宁城县| 宁强县| 东莞市| 东乌珠穆沁旗| 东海县| 格尔木市| 全州县| 武夷山市| 宽甸| 鹿邑县| 云林县| 中牟县| 共和县| 定远县| 灵川县| 潼关县| 新疆| 孝昌县| 玉溪市|