文件处理命令:sed

时间:2023-12-19 13:19:38

使用:sed [-nefr] action
action:-i直接修改读取的档案内容,而不是由屏幕输出,-r表示支持延伸型正则表达式的语法。
动作说明:[n1[,n2]] function n1,n2表示要选择的行数,function包括:
a-新增,c-取代,d-删除,i-插入,p-打印,s-取代(可以直接进行取代的工作,例如 1,20s/old/new/g)

1 替换第一个匹配的内容

[root@limt01 ~]# echo " This is a test1 test2"|sed 's/test/TEST/'
This is a TEST1 test2

2 替换所有匹配的内容

[root@limt01 ~]# echo " This is a test1 test2"|sed 's/test/TEST/g'
This is a TEST1 TEST2

3 -i 直接修改源文件

sed -i “s/my/Rango Chen's/g” pets.txt

4 在每一行最前面加上#

[root@limt01 ~]# sed 's/^/#/g' pets.txt
#This is my cat
#my cat's name is betty
#This is my dog
#my dog's name is frank
#This is my fish
#my fish's name is george
#This is my goat
#my goat's name is adam

5 在每一行的末尾加上---

[root@limt01 ~]# sed 's/$/ --- /g' pets.txt
This is my cat ---
my cat's name is betty ---
This is my dog ---
my dog's name is frank ---
This is my fish ---
my fish's name is george ---
This is my goat ---

6 只替换第3到第6行的文本

[root@limt01 ~]# sed "3,6s/my/your/g" pets.txt
This is my cat
my cat's name is betty
This is your dog
your dog's name is frank
This is your fish
your fish's name is george
This is my goat
my goat's name is adam

7 只替换第3行的文本

[root@limt01 ~]# sed "3s/my/your/g" pets.txt
This is my cat
my cat's name is betty
This is your dog
my dog's name is frank
This is my fish
my fish's name is george
This is my goat
my goat's name is adam

8 只替换每一行的第二个s

sed 's/s/S/2' my.txt    2表示第二个

9 一次替换多个模式,每个模式之间用;进行间隔

sed '1,3s/my/your/g; 3,$s/This/That/g' my.txt
sed -e'1,3s/my/your/g' -e '3,$s/This/That/g' my.txt

基础的正则表示法特殊字符:

^ 表示一行的开头。如:/^#/ 以#开头的匹配。
$ 表示一行的结尾。如:/}$/ 以}结尾的匹配。
\< 表示词首。如\<abc 表示以abc 为首的詞。
\> 表示词尾。如 abc\> 表示以abc 結尾的詞。
\ 将特殊字符进行转义,还原其本身意义:grep -n \' pets.txt 搜寻含有单引号'的那一行。
. 表示任何单个字符。
* 表示某个字符出现了0次或多次。
[ ] 字符集合。如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有^表示取反,如[^a]表示非a的字符
\{n,m\} 连续n到m个的“前一个RE字符” grep -n 'go\{2,3\}g' 1.txt 在g与g之间有2到3个o存在的字符串,亦即(goog)(gooog)