sed小計

本文索引:spa

  • 何時須要轉義
  • sed實現大小寫轉換
  • sed在特定行進行內容添加
  • sed打印特定範圍內包含特定字符串的行
  • sed高級功能:模式空間

何時須要轉義(\或-r參數)

擴展的元字符:+ ? | () {n,m};除這些外的其餘字符就不須要進行轉義了!code

[]的通常用法是做爲範圍選擇,例如索引

[root@castiel-Lu ~]# cat test
a1234
b12345
a2341a
A123
A4521a
# []內的字符多選一,這裏用於忽略大小寫
[root@castiel-Lu ~]# sed -n '/^[aA].*$/p' 2.txt 
a1234
a2341a
A123
A4521a

可是當[]字符實際有意義時,就須要進行轉義字符串

# 舉個例子 []是內容的一部分,至關於字符
[root@castiel-Lu ~]# cat test 
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfg

# 如何匹配[abcfd]行到[rty]行之間的內容
[root@castiel-Lu ~]# sed -n '/\[abcfd\]/,/\[rty\]/'p test 
[abcfd]
123
324
444
[rty]

sed實現大小寫轉換

咱們能夠使用sed來實現tr命令轉換大小寫的效果ast

例如test

[root@castiel-Lu ~]# cat 1.txt 
aBcDeFgHiJkLmn
  • 首字母轉換爲大寫
[root@castiel-Lu ~]# sed 's/\b[a-z]/\u&/g' 1.txt 
ABcDeFgHiJkLmn
  • 小寫字母轉換爲大寫\u(upper)
[root@castiel-Lu ~]# sed 's/[a-z]/\u&/g' 1.txt 
ABCDEFGHIJKLMN
  • 大寫字母轉換爲小寫\l(lower)
[root@castiel-Lu ~]# sed 's/[A-Z]/\l&/g' 1.txt 
abcdefghijklmn

sed在特定行進行內容添加

[root@castiel-Lu ~]# cat 2.txt 
a1234
b12345
a2341a
A123
A4521a
  • 追加特定行
# 在a開頭的行後追加「_test」
[root@castiel-Lu ~]# sed -r  's/(^a.*$)/\1_test/' 2.txt 
a1234_test
b12345
a2341a_test
A123
A4521a

sed打印特定範圍內包含特定字符串的行

思路:先肯定範圍,在搜索特定字符創,最後打印便可擴展

# 以此爲例
[root@castiel-Lu ~]# cat 2.txt 
a1234_test
b12345
a2341a_test
A123
A4521a

# 打印1-3行內包含字符串123的行
[root@castiel-Lu ~]# sed -n '1,3{/123/p}' 2.txt 
a1234
b12345

sed高級功能:模式空間(暫時不理解)

這裏涉及到了sed的模式空間概念sed

[root@test200 ~]# cat test
a
b
c
d
e
f
[root@test200 ~]# sed '/c/{p;:a;N;$!ba;d}' test
a
b
c

說明:定義一個標籤a,匹配c,而後N把下一行加到模式空間裏,匹配最後一行時,才退出標籤循環,而後命令d,把這個模式空間裏的內容所有清除。搜索

if 匹配"c" :a 追加下一行 if 不匹配"$" goto a 最後退出循環,d命令刪除。循環

相關文章
相關標籤/搜索