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