sed

sed正則表達式

 1 # 先讀取資料、存入模式空間、對其進行編輯、再輸出、再用下一行替換模式空間內容
 2 # 調試工具sedsed (參數 -d)   http://aurelio.net/sedsed/sedsed-1.0
 3      
 4 -n      # 輸出由編輯指令控制(取消默認的輸出,必須與編輯指令一塊兒配合)
 5 -i   # 直接對文件操做
 6 -e   # 多重編輯
 7 -r   # 正則可不轉移特殊字符
 8  
 9 b    # 跳過匹配的行
10 p    # 打印
11 d    # 刪除
12 s    # 替換
13 g    # 配合s所有替換
14 i    # 行前插入
15 a    # 行後插入
16 r    # 讀
17 y    # 轉換
18 q    # 退出
19  
20 &    # 表明查找的串內容
21 *    # 任意多個 前驅字符(前導符)
22 ?    # 0或1個 最小匹配 沒加-r參數需轉義 \?
23 $    # 最後一行
24 .*   # 匹配任意多個字符
25 \(a\)   # 保存a做爲標籤1(\1)

 

模式空間後端

 1 # 模式空間(兩行兩行處理) 模式匹配的範圍,通常而言,模式空間是輸入文本中某一行,可是能夠經過使用N函數把多於一行讀入模式空間
 2 # 暫存空間裏默認存儲一個空行
 3 n   # 讀入下一行(覆蓋上一行)
 4 h   # 把模式空間裏的行拷貝到暫存空間
 5 H   # 把模式空間裏的行追加到暫存空間
 6 g   # 用暫存空間的內容替換模式空間的行
 7 G   # 把暫存空間的內容追加到模式空間的行後
 8 x   # 將暫存空間的內容於模式空間裏的當前行互換
 9 !  # 對其前面的要匹配的範圍取反
10 D   # 刪除當前模式空間中直到幷包含第一個換行符的全部字符(/.*/匹配模式空間中全部內容,匹配到就執行D,沒匹配到就結束D)
11 N   # 追加下一個輸入行到模式空間後面並在第兩者間嵌入一個換行符,改變當前行號碼,模式匹配能夠延伸跨域這個內嵌換行
12 p   # 打印模式空間中的直到幷包含第一個換行的全部字符 

 

標籤函數跨域

1 : lable # 創建命令標記,配合b,t函數使用跳轉
2 b lable # 分支到腳本中帶有標記的地方,若是分支不存在則分支到腳本的末尾。
3 t labe  # 判斷分支,從最後一行開始,條件一旦知足或者T,t命令,將致使分支到帶有標號的命令出,或者到腳本末尾。與b函數不一樣在於t在執行跳轉前會先檢查其前一個替換命令是否成功,如成功,則執行跳轉。
4  
5 sed -e '{:p1;/A/s/A/AA/;/B/s/B/BB/;/[AB]\{10\}/b;b p1;}'     # 文件內容第一行A第二行B:創建標籤p1;兩個替換函數(A替換成AA,B替換成BB)當A或者B達到10個之後調用b,返回
6 echo 'sd  f   f   [a    b      c    cddd    eee]' | sed ':n;s#\(\[[^ ]*\)  *#\1#;tn'  #標籤函數t使用方法,替換[]裏的空格

 

引用外部變量服務器

1 sed -n ''$a',10p'
2 sed -n ""$a",10p"

 

 1 sed 10q                                       # 顯示文件中的前10行 (模擬"head")
 2 sed -n '$='                                   # 計算行數(模擬 "wc -l")
 3 sed -n '5,/^no/p'                             # 打印從第5行到以no開頭行之間的全部行
 4 sed -i "/^$f/d" a                          # 刪除匹配行
 5 sed -i '/aaa/,$d'                             # 刪除匹配行到末尾
 6 sed -i "s/=/:/" c                             # 直接對文本替換
 7 sed -i "/^pearls/s/$/j/"                      # 找到pearls開頭在行尾加j
 8 sed '/1/,/3/p' file                           # 打印1和3之間的行
 9 sed -n '1p' 文件                              # 取出指定行
10 sed '5i\aaa' file                             # 在第5行以前插入行
11 sed '5a\aaa' file                             # 在第5行以後抽入行
12 echo a|sed -e '/a/i\b'                        # 在匹配行前插入一行
13 echo a|sed -e '/a/a\b'                        # 在匹配行後插入一行
14 echo a|sed 's/a/&\nb/g'                       # 在匹配行後插入一行
15 seq 10| sed -e{1,3}'s/./a/'                   # 匹配1和3行替換
16 sed -n '/regexp/!p'                           # 只顯示不匹配正則表達式的行
17 sed '/regexp/d'                               # 只顯示不匹配正則表達式的行
18 sed '$!N;s/\n//'                              # 將每兩行鏈接成一行
19 sed '/baz/s/foo/bar/g'                        # 只在行中出現字串"baz"的狀況下將"foo"替換成"bar" 
20 sed '/baz/!s/foo/bar/g'                       # 將"foo"替換成"bar",而且只在行中未出現字串"baz"的狀況下替換
21 echo a|sed -e 's/a/#&/g'                      # 在a前面加#號
22 sed 's/foo/bar/4'                             # 只替換每一行中的第四個字串
23 sed 's/\(.*\)foo/\1bar/'                      # 替換每行最後一個字符串
24 sed 's/\(.*\)foo\(.*foo\)/\1bar\2/'           # 替換倒數第二個字符串
25 sed 's/[0-9][0-9]$/&5'                        # 在以[0-9][0-9]結尾的行後加5
26 sed -n ' /^eth\|em[01][^:]/{n;p;}'            # 匹配多個關鍵字
27 sed -n -r ' /eth|em[01][^:]/{n;p;}'           # 匹配多個關鍵字
28 echo -e "1\n2"|xargs -i -t sed 's/^/1/' {}    # 同時處理多個文件
29 sed '/west/,/east/s/$/*VACA*/'                # 修改west和east之間的全部行,在結尾處加*VACA*
30 sed  's/[^1-9]*\([0-9]\+\).*/\1/'             # 取出第一組數字,而且忽略掉開頭的0
31 sed -n '/regexp/{g;1!p;};h'                   # 查找字符串並將匹配行的上一行顯示出來,但並不顯示匹配行
32 sed -n ' /regexp/{n;p;}'                      # 查找字符串並將匹配行的下一行顯示出來,但並不顯示匹配行
33 sed -n 's/\(mar\)got/\1ianne/p'               # 保存\(mar\)做爲標籤1
34 sed -n 's/\([0-9]\+\).*\(t\)/\2\1/p'          # 保存多個標籤
35 sed -i -e '1,3d' -e 's/1/2/'                  # 多重編輯(先刪除1-3行,在將1替換成2)
36 sed -e 's/@.*//g' -e '/^$/d'                  # 刪除掉@後面全部字符,和空行
37 sed -n -e "{s/文本(正則)/替換的內容/p}"       # 替換並打印出替換行
38 sed -n -e "{s/^ *[0-9]*//p}"                  # 打印並刪除正則表達式的那部份內容
39 echo abcd|sed 'y/bd/BE/'                      # 匹配字符替換
40 sed '/^#/b;y/y/P/' 2                          # 非#號開頭的行替換字符
41 sed '/suan/r 讀入文件'                        # 找到含suan的行,在後面加上讀入的文件內容
42 sed -n '/no/w 寫入文件'                       # 找到含no的行,寫入到指定文件中
43 sed '/regex/G'                                # 在匹配式樣行以後插入一空行
44 sed '/regex/{x;p;x;G;}'                       # 在匹配式樣行以前和以後各插入一空行
45 sed 'n;d'                                     # 刪除全部偶數行
46 sed 'G;G'                                     # 在每一行後面增長兩空行
47 sed '/^$/d;G'                                 # 在輸出的文本中每一行後面將有且只有一空行
48 sed 'n;n;n;n;G;'                              # 在每5行後增長一空白行
49 sed -n '5~5p'                                 # 只打印行號爲5的倍數
50 seq 1 30|sed  '5~5s/.*/a/'                    # 倍數行執行替換
51 sed -n '3,${p;n;n;n;n;n;n;}'                  # 從第3行開始,每7行顯示一次
52 sed -n 'h;n;G;p'                              # 奇偶調換
53 seq 1 10|sed '1!G;h;$!d'                      # 倒敘排列
54 ls -l|sed -n '/^.rwx.*/p'                     # 查找屬主權限爲7的文件
55 sed = filename | sed 'N;s/\n/\t/'             # 爲文件中的每一行進行編號(簡單的左對齊方式)
56 sed 's/^[ \t]*//'                             # 將每一行前導的"空白字符"(空格,製表符)刪除,使之左對齊 
57 sed 's/^[ \t]*//;s/[ \t]*$//'                 # 將每一行中的前導和拖尾的空白字符刪除
58 echo abcd\\nabcde |sed 's/\\n/@/g' |tr '@' '\n'        # 將換行符轉換爲換行
59 cat tmp|awk '{print $1}'|sort -n|sed -n '$p'           # 取一列最大值
60 sed -n '{s/^[^\/]*//;s/\:.*//;p}' /etc/passwd          # 取用戶家目錄(匹配不爲/的字符和匹配:到結尾的字符所有刪除)
61 sed = filename | sed 'N;s/^/      /; s/ *\(.\{6,\}\)\n/\1   /'   # 對文件中的全部行編號(行號在左,文字右端對齊)
62 /sbin/ifconfig |sed 's/.*inet addr:\(.*\) Bca.*/\1/g' |sed -n '/eth/{n;p}'   # 取全部IP

 

修改keepalive配置剔除後端服務器函數

1 sed -i '/real_server.*10.0.1.158.*8888/,+8 s/^/#/' keepalived.conf
2 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
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息