sed{
#高級編輯命令
h: 模式空間覆蓋保持空間
H:模式空間追加保持空間
g:保持空間取出覆蓋至模式空間
G:保持空間取出追加至模式空間
x: 模式空間互換保持空間
n: 讀取匹配到的行的下一行至模式空間
N:讀取匹配到的行和下一行至模式空間
d: 刪除模式空間中的行
D:刪除多行模式空間中的全部行
sed 'n;d' test.txt #顯示基數行
sed -n '1~2p' test.txt #顯示基數行
sed -n 'n;p' ip #顯示偶數行
sed -n '2~2p' test.txt #顯示偶數行
sed '1!G;h;$!d' test.txt #逆序顯示文件內容
sed '$!d' fsta #取出文件最後一行
sed 'G' test.txt #每行追加空白行
sed '/^$/d;G' test.txt #每行追加空白行,多行空白行合併一個空白行
#普通參數
sed '/^#\|^$/d' fstab #刪除#和空行
sed '1,8d' fstab #1-8行刪除
sed '/^#/d' fstab----->sed -n '/^#/p' fstab #相反
sed '10a\"IP"' fstab #第10行後追加
sed '/^tmpfs/a\"IP"' fstab #tmpfs開頭的行後增長
sed '/^tmpfs/a\Hello\nword' fstab #追加兩行
sed '/^tmpfs/i\hello\nword' fstab #在行前面追加
sed '/^tmpfs/c\hello\nword' fstab #替換匹配到的行
sed '/^tmpfs/w b.txt' fstab #查找出來的行寫到b.txt
sed '/^tmpfs/!d' fstab #除了tmpfs的行刪除
sed 's/r..t/&er/g' /etc/passwd #全部r..t的字符串後面加er
sed 's/^[[:space:]]\+//' /boot/grub/grub.conf #刪除每行空白字符開頭的空白字符
echo "/etc/sysconfig" | sed 's#[^/]\+$##' #取出目錄
# 先讀取資料、存入模式空間、對其進行編輯、再輸出、再用下一行替換模式空間內容 # 調試工具sedsed (參數 -d) http://aurelio.net/sedsed/sedsed-1.0 -n # 輸出由編輯指令控制(取消默認的輸出,必須與編輯指令一塊兒配合) -i # 直接對文件操做 -e # 多重編輯 -r # 正則可不轉移特殊字符 b # 跳過匹配的行 p # 打印 d # 刪除 s # 替換 g # 配合s所有替換 i # 行前插入 a # 行後插入 r # 讀 y # 轉換 q # 退出 & # 表明查找的串內容 * # 任意多個 前驅字符(前導符) ? # 0或1個 最小匹配 沒加-r參數需轉義 \? $ # 最後一行 .* # 匹配任意多個字符 \(a\) # 保存a做爲標籤1(\1) 模式空間{ # 模式空間(兩行兩行處理) 模式匹配的範圍,通常而言,模式空間是輸入文本中某一行,可是能夠經過使用N函數把多於一行讀入模式空間 # 暫存空間裏默認存儲一個空行 n # 讀入下一行(覆蓋上一行) h # 把模式空間裏的行拷貝到暫存空間 H # 把模式空間裏的行追加到暫存空間 g # 用暫存空間的內容替換模式空間的行 G # 把暫存空間的內容追加到模式空間的行後 x # 將暫存空間的內容於模式空間裏的當前行互換 ! # 對其前面的要匹配的範圍取反 D # 刪除當前模式空間中直到幷包含第一個換行符的全部字符(/.*/匹配模式空間中全部內容,匹配到就執行D,沒匹配到就結束D) N # 追加下一個輸入行到模式空間後面並在第兩者間嵌入一個換行符,改變當前行號碼,模式匹配能夠延伸跨域這個內嵌換行 p # 打印模式空間中的直到幷包含第一個換行的全部字符 } 標籤函數{ : lable # 創建命令標記,配合b,t函數使用跳轉 b lable # 分支到腳本中帶有標記的地方,若是分支不存在則分支到腳本的末尾。 t labe # 判斷分支,從最後一行開始,條件一旦知足或者T,t命令,將致使分支到帶有標號的命令出,或者到腳本末尾。與b函數不一樣在於t在執行跳轉前會先檢查其前一個替換命令是否成功,如成功,則執行跳轉。 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,返回 echo 'sd f f [a b c cddd eee]' | sed ':n;s#\(\[[^ ]*\) *#\1#;tn' # 標籤函數t使用方法,替換[]裏的空格 echo "198723124.03"|sed -r ':a;s/([0-9]+)([0-9]{3})/\1,\2/;ta' # 每三個字符加一個逗號 } 引用外部變量{ sed -n ''$a',10p' sed -n ""$a",10p" } sed -r '/^#|^$/d' /etc/ssh/sshd_config #不顯示空行和#開頭行 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]*$//' # 將每一行中的前導和拖尾的空白字符刪除 sed '/{abc,def\}\/\[111,222]/s/^/00000/' # 匹配須要轉行的字符: } / [ 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