sed

 

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
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息