sed使用小结
1 语法
https://www.runoob.com/linux/linux-comm-sed.html
Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
1. 1 语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-
-h或--help 显示帮助。
-
-n或--quiet或--silent 仅显示script处理后的结果。
-
-V或--version 显示版本信息。
动作说明:
-
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行);
-
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行;
-
d :删除, 因为是删除啊,所以 d 后面通常不接任何咚咚;
-
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
-
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行;
-
s :取代,可以直接进行取代的工作。通常这个 s 的动作可以搭配正规表示法,例:1,20s/old/new/g;
1.2 语法案例
- 以行为单位的新增/删除
首先查看testfile中的内容如下:
$ cat testfile #查看testfile 中的内容
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
$ sed -e 4a\newline testfile # 使用sed 在第四行后添加新字符串
HELLO LINUX! # testfile文件原有的内容
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
newline
- 将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!
2 常用案例
2.1 按字符串分割文件 sed awk
https://blog.csdn.net/Answer3664/article/details/118959029
文件内容:
Please rise , then , for this minute ' s silence . ||| Please rise , then , for this minute , silence . ||| 0 1 2 3 4 5 6 7 -1 10 11
( The House rose and observed a minute ' s silence ) ||| ( he listened and observed a minute ' s silence ) ||| 0 -1 -1 4 5 6 7 8 9 10 11
Madam President , on a point of order . ||| Madam President , on points of order . ||| 0 1 2 3 -1 6 7 8
每行有3列,用 “ ||| ” 分隔,现在想抽取其中的每一列:
可以先把 “ ||| ”替换成换行符,然后隔固定行抽取:
sed "s/ ||| /\n/g" file.txt | awk '{if (NR%3 == 1) print $0; }'
sed "s/ ||| /\n/g" file.txt | awk '{if (NR%3 == 2) print $0; }'
sed "s/ ||| /\n/g" file.txt | awk '{if (NR%3 == 0) print $0; }'