1. 程式人生 > >正則擴展(1)

正則擴展(1)

特定 bcd filename 內容 數字 使用 roo cat 模糊

1.打印文件中特定的某行到某行之間的內容
(1)文件內容如下

[root@weix-01 ~]# cat aa.txt
erti
ffsa
**
$%
[abcd]
123
456
789
[ttl]
af
**
fgfg
[root@weix-01 ~]# sed -n ‘/abcd/,/ttl/p‘ aa.txt      #這種方式適用於模糊匹配
[abcd]
123
456
789
[ttl]
[root@weix-01 ~]# sed -n ‘/\[abcd]/,/\[ttl]/p‘ aa.txt     #此種為精確匹配
[abcd]
123
456
789
[ttl]

(2)當修改文件內容如下時,上面第一種方式就不適用了

[root@weix-01 ~]# cat aa.txt
erti
ffsa
**
abcd
$%
[abcd]
123
456
789
[ttl]
af
**
fgfg
[root@weix-01 ~]# sed -n ‘/abcd/,/ttl/p‘ aa.txt
abcd
$%
[abcd]
123
456
789
[ttl]
[root@weix-01 ~]# sed -n ‘/\[abcd]/,/\[ttl]/p‘ aa.txt
[abcd]
123
456
789
[ttl]

2.sed 如何轉換大小寫字母:sed中,使用\u表示大寫,\l表示小寫
(1)將文件每個單詞第一個小寫字母變大寫

sed ‘s/\b[a-z]/\u&/g‘ filename
[root@weix-01 ~]# sed ‘s/\b[a-z]/\u&/g‘ aa.txt
Erti
Ffsa
**
Abcd
$%
[Abcd]
123
456
789
[Ttl]
Af
**
Fgfg

(2)把所有小寫變大寫:

sed ‘s/[a-z]/\u&/g‘ filename
[root@weix-01 ~]# sed ‘s/[a-z]/\u&/g‘ aa.txt
ERTI
FFSA
**
ABCD
$%
[ABCD]
123
456
789
[TTL]
AF
**
FGFG

(3)大寫變小寫:

sed ‘s/[A-Z]/\l&/g‘ filename
[root@weix-01 ~]# sed ‘s/[A-Z]/\I&/g‘ aa.txt
erti
ffsa
**
abcd
$%
[abcd]
123
456
789
[ttl]
af
**
fgfg

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

[root@weix-01 ~]# sed ‘s/\(^a.*\)/\1 12/‘ aa.txt
erti
ffsa
**
abcd 12
$%
[abcd]
123
456
789
[ttl]
af 12
**
fgfg

4.刪除某關鍵字的下一行到最後一行
定義一個標簽a,匹配c,然後N把下一行加到模式空間裏,匹配最後一行時,才退出標簽循環,然後命令d,把這個模式空間裏的內容全部清除。

[root@weix-01 ~]# vi test
[root@weix-01 ~]# sed ‘/c/{p;:a;N;$!ba;d}‘ test
a
b
c
[root@weix-01 ~]# cat test
a
b
c
d
e
f

5.打印1到100行包含某個字符串的行

sed  -n ‘1,100{/abc/p}‘  1.txt
[root@weix-01 ~]# sed  -n ‘1,100{/abc/p}‘  aa.txt
abcd
[abcd]
[root@weix-01 ~]# cat aa.txt
erti
ffsa
**
abcd
$%
[abcd]
fgfg

正則擴展(1)