华升建设集团公司网站,wordpress apk,土木特网站建设,深圳网络营销网站推广方法0 前言
自 60 年代末以来#xff0c;sed 一直是 Unix 标准工具箱的一部分。 Sed在以下三种情况下特别有用#xff1a; 编辑太大的文件#xff0c;无法进行舒适的交互式编辑#xff1b; 当编辑命令序列过于复杂而无法在交互模式下轻松键入时#xff0c;可以编辑任何大小的…
0 前言
自 60 年代末以来sed 一直是 Unix 标准工具箱的一部分。 Sed在以下三种情况下特别有用 编辑太大的文件无法进行舒适的交互式编辑 当编辑命令序列过于复杂而无法在交互模式下轻松键入时可以编辑任何大小的文件。 通过输入一次有效地执行多个“全局”编辑功能。 在
Linux shell编程学习笔记73sed命令——沧海横流任我行上-CSDN博客https://blog.csdn.net/Purpleendurer/article/details/141307421?spm1001.2014.3001.5501
中我们研究了sed了基础知识现在我们来通过一些实例来见识一下sed删除和替换功能的威力。
1 sed实列
1.1 删除指定行
删除操作使用d命令。
我通过sed对seq命令产生的序列来说明。
关于seq命令的功能和用法可以参考Linux shell编程学习笔记35seq_linux shell seq-CSDN博客https://blog.csdn.net/Purpleendurer/article/details/134938053
1.1.1 删除第3行
[purpleendurer bash ~ ] seq 7
1
2
3
4
5
6
7
[purpleendurer bash ~ ] seq 7 | sed 3d
1
2
4
5
6
7
[purpleendurer bash ~ ] seq 7 命令执行的结果是产生7行数据分别是1、2、3、4、5、6、7。
我们把 seq 7 命令执行的结果通过管道传送给命令sed 3d来处理其中 3指定第3行。 d指定执行删除操作。 于是我们看到处理的结果中没有第3行。
1.1.2 删除3~5行
我们可以使用 起始行号,结束行号 来指定一个要处理的连续的行块。
要指定对第3行~第5行进行操作我们可以通过 3,5 来指定。
[purpleendurer bash ~ ] seq 7
1
2
3
4
5
6
7
[purpleendurer bash ~ ] seq 7 | sed 3,5d
1
2
6
7
[purpleendurer bash ~ ] 于是我们看到处理的结果中没有第3行~第5行。
1.1.3 删除奇数行
我们可以通过 起始行~步长 的格式来指定要处理的行。
对于奇数行起步行为1步长为2所以我们可以使用 1~2 来指定奇数行。
[purpleendurer bash ~ ] seq 7
1
2
3
4
5
6
7
[purpleendurer bash ~ ] seq 7 | sed 1~2d
2
4
6
[purpleendurer bash ~ ] 1.1.4 删除第3行及其后3行
我们也可以可以通过 起始行行数 的格式来指定要处理的行例如我人们要对第3行及其后3行进行处理那么可以使用 3,3 来指定。
[purpleendurer bash ~ ] seq 8
1
2
3
4
5
6
7
8
[purpleendurer bash ~ ] seq 8 | sed 3,3d
1
2
7
8
[purpleendurer bash ~ ] 1.1.5 直接删除纯数字行
我们可以使用正则表达式来指定要处理的行比如直接删除纯数字行。
[purpleendurer bash ~ ] cat t.txt
0
aaa
***
11
bbb
222222abc
[purpleendurer bash ~ ] sed /^[0-9]*$/d t.txt
aaa
***
bbb222abc
[purpleendurer bash ~ ] 我们先使用 cat t.txt 命令查看文件t.txt的内容其第1、4、6行都是纯数字的。
然后我们使用 sed /^[0-9]*$/d t.txt 命令将文件t.txt中的纯数字行删除后再输出。
可以看到第1、4、6这由纯数字的3行均被删除了。
而最后一行即第8行虽然开头是数字222但后面还字母aaa不是纯数字行所以没有被删除。
对命令的第2部分 /^[0-9]*$/d 作个说明。 /^[0-9]*$/^代表行开始$代表行结束二者之间 的 [0-9]* 代表数字三者放在一起就代表纯数字行。d代表删除命令 1.2 文本替换
替换操作使用d命令。
整行替换的格式一般为 sed [指定操作行]s 替换字符串/ [文件] 如果使用了正则表达式指定要替换的字符串也就是要进行精准替换可以用下面这种格式 sed s/原字符串/替换字符串/ [文件] 1.2.1 将第3行内容替换为abc
[purpleendurer bash ~ ] seq 7
1
2
3
4
5
6
7
[purpleendurer bash ~ ] seq 7 | sed 3c abc
1
2
abc
4
5
6
7
[purpleendurer bash ~ ] 1.2.2 将偶数行替换为abc
对于奇数行起步行为0步长为2所以我们可以使用 0~2 来指定偶数行。
[purpleendurer bash ~ ] seq 7
1
2
3
4
5
6
7
[purpleendurer bash ~ ] seq 7 | sed 0~2c abc
1
abc
3
abc
5
abc
7
[purpleendurer bash ~ ] 1.2.3 将每行中的 数字 替换为 -
[purpleendurer bash ~ ] echo 0 t.txt
[purpleendurer bash ~ ] echo aaa t.txt
[purpleendurer bash ~ ] echo *** t.txt
[purpleendurer bash ~ ] echo 11 t.txt
[purpleendurer bash ~ ] echo bbb t.txt
[purpleendurer bash ~ ] echo 222 t.txt
[purpleendurer bash ~ ] echo t.txt
[purpleendurer bash ~ ] cat t.txt
0
aaa
***
11
bbb
222[purpleendurer bash ~ ] sed s/[0-9]/-/g t.txt
-
aaa
***
--
bbb
---[purpleendurer bash ~ ] 我们先使用echo命令和重定向创建测试文件.txt
然后用cat t.txt 命令查看文件t.txt的内容
最后我们使用 sed s/[0-9]/-/g t.txt 命令将文件t.txt中的每行中的 数字 替换为 -再输出。
对命令的第2部分 s/[0-9]*/-/g 作个说明。 s替换命令/[0-9]*/正则表达式代表数字0123456789-要替换的字符串/g全局作用域 1.2.4 将数字替换为空再删除空行
[purpleendurer bash ~ ] cat t.txt
0
aaa
***
11
bbb
222[purpleendurer bash ~ ] sed s/[0-9]*//g t.txtaaa
***bbb
[purpleendurer bash ~ ] sed -e s/[0-9]*//g; /^$/d t.txt
aaa
***
bbb[purpleendurer bash ~ ] 我们先使用 cat t.txt 命令查看文件t.txt的内容其第1、4、6行都是纯数字的。
然后我们使用 sed s/[0-9]*//g t.txt 命令将文件t.txt中的每行中的 数字 替换为空再输出。
对命令的第2部分 s/[0-9]*//g 作个说明。 s替换命令/[0-9]*/正则表达式代表数字0123456789/g全局作用域 这里没有指定要替换的目标字符串也就是替换为空。
最后我们使用 sed -e s/[0-9]*//g; /^$/d t.txt 命令将文件t.txt中的每行中的 数字 将数字替换为空再删除空行。
对命令的第3部分 s/[0-9]*//g; /^$/d 作个说明。
这个部分由分号分为前后两个命令。
前一个命令 s/[0-9]*//g 在上面已经说明。
后一个命令 /^$/d 包括两个部分 /^$/^代表行开始$代表行结束两个符号放在一起中间没有其他这字符就代表空行d代表删除命令 1.2.5 将每行第3次出现的2替换为5
[purpleendurer bash ~ ] cat -n t.txt1 02 aaa3 ***4 115 bbb6 2227 8 222abc
[purpleendurer bash ~ ] cat -n t.txt | sed s/2/5/3 1 02 aaa3 ***4 115 bbb6 2257 8 225abc
[purpleendurer bash ~ ] 我们先使用 cat t.txt 命令查看文件t.txt的内容其第6、8行都包括3个2。
然后我们使用 cat -n t.txt | sed s/2/5/3 命令将文件t.txt中每行第3次出现的2替换为5后再输出。
可以看到第6、8行中的第3个2被替换为5了。
对sed命令后面的 s/2/5/3 作个说明。 s替换命令/2/5/3其中2是被替换的原字符串5是被替换的目标字符串3代表第3次出现。 1.2.6 将每行中第2次出现的a替换为A
[purpleendurer bash ~ ] cat -n t.txt1 02 aaa3 ***4 115 bbb6 2227 8 222abc
[purpleendurer bash ~ ] cat -n t.txt | sed -e s/a/A/21 02 aAa3 ***4 115 bbb6 2227 8 222abc
[purpleendurer bash ~ ] 我们先使用 cat t.txt 命令查看文件t.txt的内容其中第2行中有3个a。
然后我们使用 cat -n t.txt | sed s/2/5/3 命令将文件t.txt中每行中的第2次出现的a替换为A再输出。
可以看到第2行中的第2个a被替换为A了。