sed命令擴展使用操做

打印某行到某行之間的內容

倘若文件test.txt的內容是:centos

ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf

怎麼能截取code

[abcfd]
123
324
444
[rty]

這一部分出來呢?字符串

操做命令:test

  1. 知道開始行和結束行的內容
[root@centos01 t1019]# sed -nr '/\[abcfd\]/,/\[rty\]/p' test.txt
[abcfd]
123
324
444
[rty]
  1. 知道是第幾行到第幾行
[root@centos01 t1019]# sed -n '4,8p' test.txt
[abcfd]
123
324
444
[rty]

sed 如何轉換大小寫字母

  • sed中,使用\u表示大寫,\l表示小寫

文件內容以下sed

[root@centos01 t1019]# cat test.txt 
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf
Test line.
  1. 把每一個單詞的第一個字母由小寫轉換爲大寫
[root@centos01 t1019]# sed 's/\b[a-z]/\u&/g' test.txt 
Ert
Fff
**
[Abcfd]
123
324
444
[Rty]
**
Fgfgf
Test Line.
  1. 把全部小寫轉爲大寫
[root@centos01 t1019]# sed 's/[a-z]/\u&/g' test.txt 
ERT
FFF
**
[ABCFD]
123
324
444
[RTY]
**
FGFGF
TEST LINE.
  1. 把全部大寫轉爲小寫
[root@centos01 t1019]# sed 's/[A-Z]/\l&/g' test.txt 
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf
test line.

sed在文件中某一行最後添加一個數字

[root@centos01 t1019]# sed -r 's/(^f.*)/\1 888/' test.txt
ert
fff 888
**
[abcfd]
123
324
444
[rty]
**
fgfgf 888
Test line.

刪除某關鍵字的下一行到最後一行

方案一:循環

[root@centos01 t1019]# sed -i '/\[rty\]/{p;:a;N;$!ba;d}' test.txt 
[root@centos01 t1019]# cat test.txt 
ert
fff
**
[abcfd]
123
324
444
[rty]

定義一個標籤a,匹配[rty],而後N把下一行加到模式空間裏,匹配最後一行時,才退出標籤循環,而後命令d,把這個模式空間裏的內容所有清除。
if 匹配"[rty]"
:a
追加下一行
if 不匹配"$"
goto a
最後退出循環,d命令刪除。文件

方案二:標籤

[root@centos01 t1019]# sed -r '/\[rty\]/,$'d test.txt 
ert
fff
**
[abcfd]
123
324
444

打印m到n行含某個字符串的行

[root@centos01 t1019]# cat -n test.txt 
     1	ert
     2	fff
     3	**
     4	[abcfd]
     5	123
     6	324
     7	444
     8	[rty]
     9	fgfgf
    10	Test line.
[root@centos01 t1019]# sed -n '1,5{/f/p}' test.txt 
fff
[abcfd]
[root@centos01 t1019]# sed -n '1,10{/f/p}' test.txt 
fff
[abcfd]
fgfgf
相關文章
相關標籤/搜索