学习Linux必备:30个常用sed指令 (linux 常用sed指令)
Linux作为一款开源操作系统,越来越受到人们的欢迎。而作为Linux的核心要素之一的命令行,sed命令在其中的重要程度也不容小觑。在本文中,我们将为大家介绍30个常用的sed指令,以帮助大家更加轻松地学习和使用Linux。
一、sed是什么?
sed是“stream editor”的缩写,用于在纯文本文件中进行替换、删除、插入等操作。它可以在命令行中使用,也可以在脚本中被调用。sed的一大优势就是它只作用于所选定的文本行。
二、基本语法
sed的基本语法格式如下:
“`
sed [options] ‘command’ [file]
“`
其中,options和file是可选参数,command是必选参数。command可以是一系列对文本的操作命令,如替换、删除、插入等。
三、30个常用的sed指令
1. 替换字符串
替换字符串是sed的一个基本操作,它可以在指定的文本行中将一部分字符串替换成另一部分字符串。比如:
“`
$ sed ‘s/old/new/g’ file.txt
“`
以上命令表示将文件file.txt中的所有old替换成new,g表示一行中出现多次需要替换的字符串时都进行替换。
2. 替换指定行
如果要只在文件的某些行中进行替换,则可以使用标号来限定行号的范围,比如:
“`
$ sed ‘2s/old/new/g’ file.txt
“`
以上命令表示将文件file.txt中的第二行中的old替换成new。
3. 只替换匹配的字符串
如果希望只替换满足某些条件的字符串,则可使用正则表达式来过滤匹配的文本。比如:
“`
$ sed ‘/^To/s/old/new/g’ file.txt
“`
以上命令表示只将以To开头的行中的old替换成new。
4. 在行末添加文字
使用sed命令可以在行末添加文字。比如:
“`
$ sed ‘s/$/new/’ file.txt
“`
以上命令表示在文件file.txt中的每行行末添加new。
5. 删除指定行
若要删除文件中的指定行,可以使用d命令。比如:
“`
$ sed ‘2d’ file.txt
“`
以上命令表示删除文件file.txt中的第二行。
6. 删除特定字符串
若要删除指定文本行中的字符串,可以使用s命令(替换命令)。比如:
“`
$ sed ‘s/old//g’ file.txt
“`
以上命令表示删除文件file.txt中的所有old字符串。
7. 替换逗号为|
用sed命令也可以进行逗号和竖线的转换。比如:
“`
$ sed ‘s/,/|/g’ file.csv > newfile.csv
“`
以上命令表示将文件file.csv中的逗号替换成竖线,并将结果写入newfile.csv中。
8. 在特定行之后添加新行
在特定行的下面添加新行是一个常见的需求。使用sed命令,只需将行号指定到后面并添加文本即可,比如:
“`
$ sed ‘2a\add a new line’ file.txt
“`
以上命令表示在文件file.txt的第二行下添加一行“add a new line”。
9. 添加注释
如果需要在文件的某些位置添加注释,只需使用#号即可。比如:
“`
$ sed ‘2a\# add a comment’ file.txt
“`
以上命令表示在文件file.txt的第二行下添加一行注释“# add a comment”。
10. 删除多余的空白行
批量清除空白行是使用sed命令的常见任务之一,例如:
“`
$ sed ‘/^$/d’ file.txt
“`
以上命令表示删除文件file.txt中的所有空白行。
11. 行首插入文字
插入特定文本到行首也是sed命令可以完成的任务之一,例如:
“`
$ sed ‘s/^/add text to the begining: /’ file.txt
“`
以上命令表示在文件file.txt中的每行行首添加“add text to the begining:”。
12. 将指定范围内的行合并为一行
将多行文本合并为一行也是一种相当实用的任务。sed命令可以通过使用N命令来实现,例如:
“`
$ sed -n ‘1,3H; 4,$ { x; s/\n/ /g; p}’ file.txt
“`
以上命令表示将1至3行的内容合并到一个缓冲区后,在第4行及之后的行中,将所有换行符替换成空格,并将结果输出。
13. 对行进行编号
在对Linux命令行进行某些操作时,经常需要对行进行编号。可以使用以下命令:
“`
$ sed = file.txt | sed ‘N; s/\n/\t/’
“`
以上命令表示对文件file.txt进行行号编号,并在行号与行内容之间加上一个制表符(/t)。
14. 抽取指定行
抽取文件中的特定行可使用如下命令:
“`
$ sed -n ‘1p’ file.txt
“`
以上命令表示抽取文件file.txt中的之一行。
15. 批量添加行号
如果需要批量添加行号,则可以使用如下命令:
“`
$ sed = file.txt | sed ‘N;s/\n/\t/;’
“`
以上命令表示将文件file.txt的文本行编号并用制表符分隔行号和行内容。
16. 删除指定范围内的所有行
如果需要删除文件中的指定行,可以使用如下命令:
“`
$ sed ‘1, 5d’ file.txt
“`
以上命令表示删除文件file.txt中的第1至5行。
17. 删除指定匹配的行
如果需要删除指定文本中的某些行,可以使用如下命令:
“`
$ sed ‘/text/d’ file.txt
“`
以上命令表示删除文件file.txt中包含文本“text”的所有行。
18. 批量替换字符串
批量替换字符串可以使用如下命令:
“`
$ sed ‘s/text1/text2/g’ file.txt > newfile.txt
“`
以上命令表示将文件file.txt中的所有text1替换成text2并将结果写入newfile.txt。
19. 批量插入空白行
与批量删除空白行相比,批量插入空白行也是一个常见需求,可以使用如下命令:
“`
$ sed G file.txt
“`
以上命令表示在文本file.txt的每一行之后添加一行空行。
20. 批量添加特定内容
在文件中批量添加特定内容,可以使用如下命令:
“`
$ sed ‘1i\ add a new line at the beginning’ file.txt
“`
以上命令表示在文件file.txt的之一行之前添加一行文本“add a new line at the beginning”。
21. 删除字符串末尾的空格
删除字符串末尾的空格也是通过sed命令实现的,比如:
“`
$ sed ‘s/[ \t]*$//’ file.txt
“`
以上命令表示删除文件file.txt中每一行末尾的空格和制表符。
22. 删除双引号
删除文件中的双引号也是常见的需求之一,可以使用如下命令:
“`
$ sed ‘s/”//g’ file.txt
“`
以上命令表示删除文件file.txt中出现的所有双引号。
23. 删除行尾的逗号
删除行尾逗号也可以使用sed命令实现,比如:
“`
$ sed ‘s/,$//’ file.txt
“`
以上命令表示删除文件file.txt中每行末尾的逗号。
24. 合并行
合并文本文件中的两行可以使用如下方式:
“`
$ sed ‘N;s/\n/ /’ file.txt
“`
以上命令表示将文件file.txt中每两行合并为一行。
25. 快速编辑文件
sed命令可以使用户快速编辑大型文本文件,例如:
“`
$ sed -i ‘s/text1/text2/g’ file.txt
“`
以上命令表示将文件file.txt中所有的text1替换成text2。使用-i选项可使sed命令直接编辑源文件,不需使用额外的输出文件。
26. 批量删除每行行首的空格
批量删除每行行首的空格也是常见的需求之一,可以使用如下命令:
“`
$ sed ‘s/^[ \t]*//’ file.txt
“`
以上命令表示删除文件file.txt中每行开头多余的空格和制表符。
27. 使用正则表达式查找和替换
使用sed命令可以使用正则表达式进行查找和替换,例如:
“`
$ sed ‘s/[0-9]*//g’ file.txt
“`
以上命令表示删除文件file.txt中的所有数字。
28. 删除指定范围内的行
如果需要删除特定范围内的行,可以使用如下命令:
“`
$ sed ‘2,4d’ file.txt
“`
以上命令表示删除文件file.txt中的第2至4行。
29. 批量添加特定文本
在对批量文本进行操作时,添加特定文本可以使用如下命令:
“`
$ sed ‘s/^/new text: /’ file.txt
“`
以上命令表示在文件file.txt中的每行行首添加“new text: ”。
30. 替换指定范围内的行
如果需要在指定的范围内替换文本,则可以使用如下命令:
“`
$ sed ‘2,$ s/text1/text2/g’ file.txt
“`
以上命令表示在文件file.txt中的第2行及之后的所有行中将文本text1替换成text2。
综上,sed指令是Linux命令行中不可或缺的一部分。本文介绍了30个较为实用的sed指令,希望读者能够在日常的工作中灵活运用sed命令,提高自己的工作效率。