建设一个网站主要受哪些因素的影响,深圳做h5网站的公司,企业微信营销管理软件,东莞读音sed系列文章 
linux常用命令(9)#xff1a;sed命令(编辑/替换/删除文本)linux sed命令删除一行/多行_sed删除第一行/linux删除文件某一行linux sed批量修改替换文件中的内容/sed特殊字符 文章目录 sed系列文章一、sed替换文本语法1.1、基础语法1.2、高阶语法 二、实战/实例2.1…sed系列文章 
linux常用命令(9)sed命令(编辑/替换/删除文本)linux sed命令删除一行/多行_sed删除第一行/linux删除文件某一行linux sed批量修改替换文件中的内容/sed特殊字符 文章目录 sed系列文章一、sed替换文本语法1.1、基础语法1.2、高阶语法 二、实战/实例2.1、批量替换文件中的内容2.2、字符串中包含特殊字符2.2.1、方式一、对特殊字符进行转义2.2.2、方式二、更换分隔符 2.3、一些特殊字符的使用/替换指定的行2.4、多个替换在同一个命令中执行2.5、查找文件并替换内容2.6、修改文件的同时备份文件2.7、修改每一行第n次出现的内容2.8、sed n p一般和sed s替换一起使用 sed -n s/pattern/replacement/p2.9、sed p用法(查看第几行、范围打印)2.10、sed w file(将缓冲区中的内容写到指定的 file 文件中)  一、sed替换文本语法 
1.1、基础语法 
若只是想全局修改文件中的指定内容掌握此语法就够了不用再看高阶语法。 
# 批量修改文件中的内容
sed -i s/原字符串/替换字符串/g filename说明 
-i:直接修改文件中的内容并且不在屏幕上输出。不加-i不会修改文件中的内容且会将执行结果输出在屏幕上。s 命令用于替换。命令末端的 g 表示在行内全局替换也就是说如果每一行里出现多个“原字符串”所有的 “原字符串”都会被替换为 “替换字符串”。如果没有 g 命令则只将每一行的第一个“原字符串”替换为 “替换字符串”。 
1.2、高阶语法 
此语法可以修改指定的行、范围修改(如第二到第五行)等等。 
# 批量修改文件中的内容
sed -i [address]s/pattern/replacement/flags filename说明 
-i:直接修改文件中的内容并且不在屏幕上输出。不加-i不会修改文件中的内容且会将执行结果输出在屏幕上。address 表示指定要操作的具体行pattern 指的是需要替换的内容replacement 指的是要替换的新内容。s 命令用于替换。 
address用法如下 
用法说明address数字表示第几行。如3指第三行address,address1数字表示从第几行到第几行。如3,5 从第三行到第五行$表示最后一行。如2,$ 从第二行到最后一行 
此命令中常用的 flags 标记如表所示 
flags 标记功能n1~512 之间的数字表示指定要替换的字符串在一行中出现第几次时才进行替换例如一行中有 3 个 A但用户只想替换第二个 A这是就用到这个标记g对数据中所有匹配到的内容进行替换如果没有 g则只会在第一次匹配成功时做替换操作。例如一行数据中有 3 个 A则只会替换第一个 Ap会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。w file将缓冲区中的内容写到指定的 file 文件中用正则表达式匹配的内容进行替换\n匹配第 n 个子串该子串之前在 pattern 中用 指定。\转义转义替换部分包含、\ 等。 
二、实战/实例 
2.1、批量替换文件中的内容 
# 将aa.txt文件中所有的男替换为man
sed -i s/男/man/g aa.txt2.2、字符串中包含特殊字符 
若原字符串或替换字符串中包含特殊字符可以通过以下方式进行解决。 
2.2.1、方式一、对特殊字符进行转义 
假如sed s命令中原字符串与替换字符串中包含特殊字符可以转义特殊字符包含/、 等等。 
# 示例1将|替换为。 字符中包含对进行转义
sed -i s/|/\/g *.txt# 示例2将/app/name替换为/user/demo 。字符串中包含/对/进行转义
sed -i s/\/app\/name/\/user\/demo/g *.txt2.2.2、方式二、更换分隔符 
我们上面讲过sed的语法如下。使用/进行分割sed是允许其他分隔符的不论什么字符紧跟着s后面的都会被认为是分隔符。 
# 批量修改文件中的内容
sed -i s/原字符串/替换字符串/g filename其他分隔符示例 
[root ~]$ echo this is /a/b/c | sed s#/a/b/c#/x/y/z#g
this is /x/y/z
[root ~]$ echo this is /a/b/c | sed s/a/b/c/x/y/zg
this is /x/y/z
[root ~]$ echo this is /a/b/c | sed s!/a/b/c!/x/y/z!g
this is /x/y/z
[root ~]$ echo this is /a/b/c | sed s|/a/b/c|/x/y/z|g
this is /x/y/z
[root ~]$ echo this is /a/b/c | sed s_/a/b/c_/x/y/z_g
this is /x/y/z这些紧跟在s后面的字符#、、、|、_)都可以作为分隔符换成这样的表达方式就会清晰很多推荐使用竖线(|)。当然如果是输入源/输出内容中有分隔符依然需要使用反斜杠进行转义。 2.3、一些特殊字符的使用/替换指定的行 
”^”表示行首 ”$”符号如果在引号中表示行尾但是在引号外却表示末行(最后一行) 
# 注意这里的    符号如果没有 “”就会直接将匹配到的字符串替换掉
sed s/^/添加的头部/g      #在所有行首添加
sed s/$/添加的尾部/g      #在所有行末添加
sed 2s/原字符串/替换字符串/g  #替换第2行
sed $s/原字符串/替换字符串/g   #替换最后一行
sed 2,5s/原字符串/替换字符串/g #替换2到5行
sed 2,$s/原字符串/替换字符串/g #替换2到最后一行 2.4、多个替换在同一个命令中执行 
多个替换可以在同一条命令中执行,用分号”;”分隔其格式为: 
# 同时执行两个替换规则
sed s/^/添加的头部/g;s/$/添加的尾部/g 2.5、查找文件并替换内容 
有时候目录下有多个文件都需要修改可以通过grep命令查找出相应的文件然后批量替换掉。 
sed -i s/查找字段/替换字段/g grep 查找字段 -rl 路径2.6、修改文件的同时备份文件 
有时候我们想要一种效果是修改前先备份文件则可使用以下命令 
sed -i.bak s/原字符串/替换字符串/g filename-i.bak 表示直接对原文件进行编辑的同时做备份从上图可以看出sed -i.bak是先将要修改的文件备份后再修改的。 
ps: -i后面不一定要是bak可以指定任何内容备份文件上会以指定内容结尾如sed -i.2022则备份文件名以.2022结尾 
2.7、修改每一行第n次出现的内容 
# 修改每一行第二次出现的内容
sed -i s/原字符串/替换字符串/2 filename
# 修改每一行第二次到最后的内容
sed -i s/原字符串/替换字符串/2g filename可以看到使用数字 2 作为标记的结果就是sed 编辑器只替换每行中第 2 次出现的匹配模式。 
2.8、sed n p一般和sed s替换一起使用 sed -n ‘s/pattern/replacement/p’ 
我们知道-n 选项会禁止 sed 输出但 p 标记会输出修改过的行将二者匹配使用的效果就是只输出被替换命令修改过的行例如 
[rootcentos test]# cat aa.txt
| 1 | tom | 男 |
| 2 | jack| 女 |
| 3 | cary| 男 |
| 4 | cody| 女 |
[rootcentos test]# sed s/tom/tony/p aa.txt   -- 不加-n时会多次输出
| 1 | tony | 男 |
| 1 | tony | 男 |
| 2 | jack| 女 |
| 3 | cary| 男 |
| 4 | cody| 女 |
[rootcentos test]# sed -n s/tom/tony/p aa.txt  -- 加-n后只输出修改过的行
| 1 | tony | 男 |
[rootcentos test]# 2.9、sed p用法(查看第几行、范围打印) 
sed 与p命令一起可以打印第几行、范围打印(从第几行到第几行)、打印匹配的行。 
sed -n /qwf/p sed.txt   --查看某一行的信息
sed -n 1p sed.txt    --查看第1行
sed -n 2p sed.txt    --查看第2行
sed -n 1,2p sed.txt   --查看1-2行 
sed -n 1p;3p sed.txt  --查看第1行第3行[rootwww ~]# cat sed.txt 
123
qfq
root
root
root
qwf
ok
This is a test of the trial script.
This is the second test of the trial script.[rootwww ~]# sed   /root/p sed.txt  -- 每一行打印一次p命令会把匹配上的再打印一次
123
qfq
root
root
root
root
root
root
qwf
ok
This is a test of the trial script.
This is the second test of the trial script.[rootwww ~]# sed -n  /root/p sed.txt  --查找某一行的关键字使用-n p选项n是静默p是打印
root
root
root[rootwww ~]# sed -n s/disabled/enforcing/p /etc/selinux/config 
#     enforcing - No SELinux policy is loaded.
SELINUXenforcing[rootwww ~]# sed -n /qwf/p sed.txt   --查看某一行的信息
qwf
[rootwww ~]# sed -n 1p sed.txt 
123
[rootwww ~]# sed -n 2p sed.txt 
qfq[rootwww ~]# sed -n 1,2p sed.txt   --查看1-2行 
123
qfq
[rootwww ~]# sed -n 1p;3p sed.txt  --查看第1行第3行
123
root2.10、sed w file(将缓冲区中的内容写到指定的 file 文件中) 
w 命令用来将文本中指定行的内容写入文件中此命令的基本格式如下 
[address]w filename下面的例子是将数据流中的前两行打印到一个文本文件中 
[rootlocalhost ~]# sed 1,2w test.txt data6.txt
This is line number 1.
This is line number 2.
This is line number 3.
This is line number 4.
[rootlocalhost ~]# cat test.txt
This is line number 1.
This is line number 2.示例将命中的行保存到文本中 
[rootcentos test]# cat data.txt
This is a test line.
This is a different line.
[rootcentos test]# sed s/test/trial/w test.txt data.txt  --将命中的内容保存到test.txt文件中
This is a trial line.
This is a different line.
[rootcentos test]# cat test.txt
This is a trial line.
[rootcentos test]#