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 -n '1,3p' 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

刪除第一行、最後一行或增加刪除某行

1、刪除文檔的第一行
sed -i '1d' test.txt

2、刪除文檔的最後一行
sed -i '$d' test.txt

3、在文檔指定行中增加一行
例如文檔如下:
echo "1";
echo "2";
echo "4";
echo "5"; 
# 在echo "2"行 後 添加 一行 echo "3";
sed -i '/echo "2";/a echo "3";'  test.txt
# 在echo "2"行 前 添加 一行 echo "5"
sed -i '/echo "2";/i echo "5"'  test.txt
格式:
sed -i '/字符 /a 新字符' test.txt

4、刪除文件中的第3行
sed -i '3d' test.txt

5、刪除文件中包含某個關鍵字開頭的所有行
sed -i '/^QWQ/d' test.txt

6、刪除文件中包含某個關鍵字 QWQ 的所有行 
sed -i '/QWQ/d' test.txt

7、每行 首行 添加字符
sed -i 's/^/2/' test.txt
刪除 首行 字符
sed -i 's/^2//' test.txt

8、每行 行尾 添加字符
sed -i 's/$/2/' test.txt
刪除 行尾 字符
sed -i 's/2$//' test.txt

sed 's///g' 與sed 's///' 的區別
+g :匹配每一行有行首到行尾的所有字符
不加g 配每一行的行首開始匹配,匹配到第一個符合的字段
9、 打印第一行第一個字符不包含空白
cat -A /var/spool/cron/root | awk  -F '' '{print $1}'
10、刪除 指定關鍵字 name 行 後五行
sed -i '/name/,+5d' file.txt

 

sed 匹配行內字符變更

sed -i '1i\111' file 
# 第一行之前添加
sed -i '1a\111' file 
# 第一行之後添加
1、特殊字符前添加
sed -i "s/111/222&/g" test.txt
# 在 111 字符前 加  222

sed -i "s/111/&222/" test.txt
# 在 111 字符後 加  222
sed -i "s/.*111/222&/g" test.txt
#在 包含 111 所在行的行首 添加 222

sed -i "s/111.*/222&/g" test.txt
#在 包含 111 所在行的行尾 添加 222
sed -i "/111/i\bbb" test.txt
# 在 包含 111 字符的文件所在行前 添加一行 bbb

sed -i "/111/a\bbb" test.txt
# 在 包含 111 字符的文件所在行後 添加一行 bbb
2、 匹配註釋
sed -i "s/^[^#].*restart/#&/g" test.txt
# 匹配含有 restart 的 非# 開頭的行加 # 註釋

3、匹配取消註釋
sed -i "/^#.*restart/s/^#//" /var/spool/cron/root
# 匹配含有 restart 的取消註釋

4、取消所有行首字母#
sed -i "s/^#//g" /var/spool/cron/root


查詢 打印 文件首行
find /opt/services/ -name 'changelog.txt' -exec sed -n 1p {} \;