学习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命令,提高自己的工作效率。

相关问题拓展阅读:

linux shell sed命令用法

s/::RE::/::DT::/::OPTION::

是这个语法…

sed替换命令的结构为: s/A/B/

你在最后少了个斜杠/,结吵冲差构不完整判纳,会报升皮错。

修改为:

A=hello

ar=$(date “+%Y%m%d”)

echo A | sed “s/he/$Var/”

我注意到你结尾脊灶兄忘写樱袭斜杠了。

echo $A |  sed 辩答”s/he/$Var/”

$ echo $A | sed “s/he/$Var/游握孙”

llo

帮你试过了神链皮孝

linux之sed用法

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。

sed命令行格式为:

sed ‘command’ 输入文本

常用选项:

n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

e∶直接在指令列模式上进行 sed 的动作编辑;

f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

r∶sed 的动作支援的是延伸型耐嫌正规表示法的语法。(预设是基础正规表示法语法)

i∶直接修改读取的档案内容,而不是由萤幕输出。

常用命令:

a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~

c ∶取代, c 的后面昌历手可以接字串,这些字串可以取代 n1,n2 之间的行!

d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;

i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~

s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是。

举例:(假设我们有一文件名为ab)

删除某行

# sed ‘1d’ ab#删除之一行

# sed ‘$d’ ab#删除最后一行

# sed ‘1,2d’ ab#删除之一行到第二行

# sed ‘2,$d’ ab#删除第二行到最后一行

  显示某行

. # sed -n ‘1p’ ab#显示之一行

# sed -n ‘$p’ ab#显示最后一行

# sed -n ‘1,2p’ ab#显示之一行到第二行

# sed -n ‘2,$p’ ab#显示第二行到最后一行

  使用模式进行查询

# sed -n ‘/ruby/p’ ab #查询烂悄包括关键字ruby所在所有行

# sed -n ‘/\$/p’ ab#查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义

  增加一行或多行字符串

# cat ab

Hello!

ruby is me,welcome to my blog.

end

# sed ‘1a drink tea’ ab #之一行后增加字符串”drink tea”

Hello!

drink tea

ruby is me,welcome to my blog.

end

# sed ‘1,3a drink tea’ ab #之一行到第三行后增加字符串”drink tea”

Hello!

drink tea

ruby is me,welcome to my blog.

drink tea

end

drink tea

# sed ‘1a drink tea\nor coffee’ ab #之一行后增加多行,使用换行符\n

Hello!

drink tea

or coffee

ruby is me,welcome to my blog.

end

  代替一行或多行

# sed ‘1c Hi’ ab #之一行代替为Hi

Hi

ruby is me,welcome to my blog.

end

# sed ‘1,2c Hi’ ab#之一行到第二行代替为Hi

Hi

end

  替换一行中的某部分

  格式:sed ‘s/要替换的字符串/新的字符串/g’ (要替换的字符串可以用正则表达式)

# sed -n ‘/ruby/p’ ab | sed ‘s/ruby/bird/g’ #替换ruby为bird

  # sed -n ‘/ruby/p’ ab | sed ‘s/ruby//g’#删除ruby

插入

# sed -i ‘$a bye’ ab#在文件ab中最后一行直接输入”bye”

# cat ab

Hello!

ruby is me,welcome to my blog.

end

bye

sed 命令查找与替换:

(1)删除第2,3行:sed ‘2,3d’ test.txt > new.txt

(2)替换:

替换所有:sed ‘s/abc/ABC/’ test.txt >new.txt

查找: sed -n “/abc/p” test.txt

匹配字符串中的一部分: echo abc123 | sed ‘s/\(*\).*/\1/’

echo “ab001_ac” | sed ‘s/\(.*\)\_\(.*\)/\1,\2/’ \1表示之一个括号匹配的字符

echo “ABC01” | sed “s/*\(*\)/\1/”\1匹配后面的数字部分

echo “ab001_AC88” | sed ‘s/*\(*$\)/\1/’

echo “a001_aaST88” | sed “s/\(.*\)\(\)\(*$\)/\2/”

sed “s/^/\”&/” 32.txt 行首添加双引号

sed “s/$/\”&/” 33.txt 行尾添加双引号

sed “s/*$//” 35.txt 替换行尾空格

只显示指定行范围的文件内容,例如:

# 只查看文件的第100行到第200行

sed -n ‘100,200p’ mysql_slow_query.log

sed -n $n”p” 22.txt 显示某一行 n=2

sed大小写转换?

如何先查找,再追加所查找的行到一个新的文件:

(3)查找Tab:

sed “s/\{2,\}/\|/g”查找Tab,查找多空格,单独一个空格的除外

awk ‘/3\t/’ 34.txt 查找\t

sed -n ‘/3>/p’ 34.txt 查找空格

sed “/\\t/p” 34.txt 查找tab

echo “\tabc\t23” | sed ‘s/>/-/’ 替换tab

sed -n ‘/>*/p’ 34.txt 查找tab

如何只替换第2个\t?

(4)

行末空格

sed ‘s/*$//g’

(5)替找空格:

echo “abc 23” | sed ‘s/\{2,\}/ /’ 把多个空格替换成一个空格

(3)

如果你想在每行的80个字符后加一个冒号,你可写:

sed ‘s/./&:/80’ new

你也可以以蛮力解决,如下:

sed ‘s/^……………………………………………………………………../&:/’ new

(4)找一个sed命令在文件每一行加一个变量的例子:

sed ‘s/.*/&-/’ new.txt

用&作为匹配的串

有时你想查找一个模式,然后加上几个字符,比如在匹配的串前后加上括号。如果你是找一个确定的字符串,还是比较简单的,如下即可:

sed ‘s/abc/(abc)/’ new

如果你不是非常清楚你将找到的是串是什么,那你应该如果来利用你找到的串做某种替换呢?

答案就是你需要一个特定的字符”&”,它即指代匹配的模式

sed ‘s/*/(&)/’ new

你可以在替换时多次使用”&”,比如,你可以次每行开头的数字复制一次,如下:

% echo “123 abc” | sed ‘s/*/& &/’

abc

让我再修正一下这个例子,sed会以贪婪的方式匹配之一个串。对于’*’的之一个区配是之一个字符,因为这个正则是匹配0个或多个数字。所以如果输入是”abc 123”,输出也不会改变(当然,除了有一个空格在字母之前)。一个能保证能匹配一个数字的更好的复制数字的方法是:

% echo “123 abc” | sed ‘s/*/& &/’

abc

(5)sed 中如何使用变量(变量使用单引号包起来):

echo “abc” | sed ‘s/ab/’$v’/’

如何在文件的每一行的最前面加一个字符串和空格!

sed ‘s/^/ttt /g’ test

如何在文件的每一行的最前面加一个字符串和空格!

sed ‘s/^/ttt /g tese | sed ‘s/$/ sss\&/g’

如何在文件的每一行的最前面加一个字符串和空格!

sed ‘s/^/ttt /g tese | sed ‘s/$/ sss\&/g’

(7)匹配空行:

查找空行:sed -n “/^$/p” 20.txt

删除空行:sed “/^$/d” 21.txt

n 不打印; sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑),p命令可以用来打印编辑行

c 下一命令是编辑命令,使用多项编辑时加入此选项

f 如果正在调用sed脚本文件,使用此选项,此选项通知sed一个脚本文件支持所用的sed命令,如

sed -f myscript.sed input_file 这里myscript.sed即为支持sed命令的文件

(21) 只显示指定行范围的文件内容,例如:

# 只查看文件的第100行到第200行

sed -n ‘100,200p’ mysql_slow_query.log

(22)退出状态

sed不向grep一样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。

(23)y命令

该命令与UNIX/Linux中的tr命令类似,字符按照一对一的方式从左到右进行转换。例如,y/abc/ABC/将把所有小写的a转换成A,小写的b转换成B,小写的c转换成C。

sed ‘1,20y/hrwang12/HRWANG^$/’ datafile

#将1到20行内,所有的小写hrwang转换成大写,将1转换成^,将2转换成$。

#正则表达式元字符对y命令不起作用。与s命令的分隔符一样,斜线可以被替换成其它的字符。

(24)% echo “123 abc” | sed ‘s/*/& &/’

abc

字符串”abc”没有改变,因为它没有匹配正则表达式,如果你想在输出中删除”abc”,你必须扩展正则表达式来匹配行的其它的部分,并显式地用”(”,”)”和”\1”来指名,这就是下节的内容了。

用\1来指明匹配的部分

我已经在正则表达式那一章中介绍了”(” ”)”和”\1”的用法。现在复习一下,被转义的括号(即,有反斜杠在前面的括号)来记录正则表达的某一部分。”\1”是被记录的之一个模式,”\2”是第二个被记录的模式。Sed可以记录9个模式。

如果你想保存每行的之一个单词,并删除行的其它部分,你可以用下面的命令:

sed ‘s/\(\*).*/\1/’

我应该再详细地解释一下。正则表达式是以贪婪的方式匹配。”*”匹配0个或多个小写字母,它会尽量匹配更多的小写字母。”.*”会在之一个匹配后匹配0个或多个字符。因为之一个模式已经匹配了所有的小写字母,第二个模式会匹配剩下的字符,所以你使用命令:

echo abcd123 | sed ‘s/\(*\).*/\1/’

会输出”abcd”,而删除后面的数字。

如果你想调换两个单词的位置,你可记录两个模式,并改变它们的次序。

sed ‘s/\(*\) \(*\)/\2 \1/’

注意两个模式中间是有空格的。这个可保证找到两个单词。但是*这种模式会匹配0个字母,如果你想至少匹配一个字母,你可以用下面的命令:

sed ‘s/\(*\) \(*\)/\2 \1/’

“\1”并不需要一定出现在替换串中(右部),它你也可以在查找的模式中(左部)。如果你想删除重复的单词,你可以用:

sed ‘s/\(*\) \1/\1/’

linux指令 sed指令怎么选择列

首先我这边先建一个字母大小转换的脚本test2.sh,内容如下:

先介绍些sed -n的应用:

sed命令中p能实现打印匹配行的功能。我们可以实际看下sed命令带-n和不带-n情况下有什么不同。

sed -n “1p” test2.sh:带-n选项的话,只打印test2.sh脚本之一行匹配行。

sed “1p” test2.sh:不带-n的话,不仅打印之一行匹配行,还打印输出test2.sh脚本的全部内容。

sed -n还可以打印文件的范围,比如打印test2.sh脚本的前两行,我们就可以执行以下命令:sed -n “1,2p” test2.sh,就可以直接打印前两行。

sed命令可以打印匹配模式行,比如打印test2.sh脚本匹配tr的行,就可以执行以下命令:

sed -n /tr/p test2.sh。

remark:如果不带-n的话,除了打印匹配行外,还会打印脚本的全部内容。

sed -e的应用。只有当sed命令传递多个编辑命令式,才会使用到-e。比如:我想打印/tr/匹配行,并且打印匹配行所在的行号,此时存在多个sed参数,就要用型乱源到-e了。

sed -n -e /tr/p -e /tr/= test2.sh

每个参数前都要带上-e:

sed a\追加命令,命令格式为:sed ’指定地址a\追加内容‘ 目标文件

这个追加内容在匹配行的下一行,只会输出到标准输出,原文件内容是不变的,例如在test2.sh脚本的/tr/所在的匹配行的下一行添加“#hello”内容,可需要执行:

sed ‘/tr/a\#hello’ test2.sh

一定不要忘记单引号.

还有一个sed i\的追加命令,命令格式为:sed ’指定地址i\追加内容‘ 目标文件,跟a\不同,i\追加是在指定位置的上一行追加命令

sed命令中还有一些特殊的匹配,比如元字符匹配,此时需要用

转义符

“\”屏蔽其特殊意义。

比如:sed -n ‘/\=/p’test2.sh,则打印输出tr一行。

$在

正则表达式

中表示尾行,执行sed -n ‘$p’ test2.sh则打印脚本尾行。

!表示取反,可以看以下两个例子

sed中可以使用关键字来匹配行,打印我们所需要的陪敬内容,比如,我希望打印test2.sh第2,3行,可以执行:sed -n “2,” test2.sh,也可以执行sed -n “/tr/,/exit/p” test2.sh

sed c\的应用,命令格式为:sed ’指定地址c\替换内容‘ 目标文件。比如,#hello,替换test2.sh脚本的tr这行,可以执行命令:sed ‘/tr/c\#hello’ test2.sh

sed删除d应用:比如我想删除test2.sh的第2行,可以执行以下命令:sed “2d” test2.sh或者sed /tr/d test2.sh

sed替换s应用:格式 sed s/被替换的字符/替换字符/

比如,我想把test2.sh中tr替换成大写的tr,则可以执行以下命令:sed ‘s/tr/TR/’test2.sh,则把脚本中的tr替换成TR,完后输出全部内容。

如果仅想打印替换所在行,则需要卜态试用使用-n和-p:sed -n ‘s/tr/TR/p’ test2.sh:把脚本中的tr替换成TR,然后打印tr所在的行.

如果脚本中存在好几个tr,并且每一行也存在多个tr,如果执行以上命令的话,只会更改每一行的之一个出现的tr,如果要全部把tr转后为TR,则需要添加G参数:

sed -n ’S/tr/TR/pg’test2.sh。

w参数是定向输入参数,比如要把上述的变更定向输出到test1.txt中,则需要执行:

sed -n ’s/tr/TR/pgw test1.txt’ test2.sh。

也可以直接把选定的匹配内容写到另一个文本中,比如想把test2.sh中tr这一样写到test2.txt中,执行:sed -n ’/tr/w test2.txt‘ test2.sh

sed 编返纯辑器是 Linux 系统管理员的工具包中最有用的资产之一

Linux 操作系统更大的一个好处是它带有各种各样的实用工具。存在如此之多不同的实用工具,几乎不可能知道并了解所有这些工具。可以简化关键情况下操作的一个实用 工具是 sed。它是任何管理员的工具包中最强大的工具之一,并且可以证明它自己在关键情况下非常有价值。

关于linux 常用sed指令的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 学习Linux必备:30个常用sed指令 (linux 常用sed指令)