Linux Sed工具测试文件的应用 (linux sed 测试文件)

在Linux系统中,有许多工具都可以被用来完成一些基础的文本处理任务。其中一个被很多人喜欢使用的命令行工具是sed。sed是一个流编辑器,它被设计用来自动编辑文件的内容,并且能够以非常高效的方式将这些操作应用到大量的文本数据上。

在本文中,我们将介绍如何使用sed来处理几个测试文件。这些文件包含了不同的文本数据形式,它们将帮助我们熟悉sed的功能和用法。

测试文件1:demo.txt

———————

我们先从一个非常简单的文件开始:demo.txt。这个文件包含了一段无意义的文本。

“`

This is some text in demo.txt.

“`

我们可以用sed来删除这个文件中的所有文本。为此,我们可以使用空替换命令:s//。在这里,我们只需要给sed一个包含/的替换表达式就可以了。代码如下:

“`

sed ‘s/.*/ /’ demo.txt

“`

当我们执行这条命令后,我们会发现demo.txt变成了一个空文件。

测试文件2:demo2.txt

———————-

现在让我们看一下另一个测试文件,它包含了一些更复杂的文本。文件名为demo2.txt,内容如下:

“`

This is an example of a line

This is another example of a line

This line contns “quotation marks”

This line contns “quotes” and ‘apostrophes’

“`

这个文件包含了四行文本。之一行和第二行都非常简单,而第三行和第四行则包含了引号和撇号等特殊字符。

假设我们想要删除这个文件中所有含有引号和撇号的行。我们可以使用下面的命令:

“`

sed ‘/[\”\x27]/d’ demo2.txt

“`

这行代码的意思是,查找所有包含引号或撇号的行,并将它们从文本中删除。

当我们运行这个命令时,输出结果将只包含前两行文本:

“`

This is an example of a line

This is another example of a line

“`

测试文件3:demo3.txt

———————-

现在,让我们再来看一个测试文件。这个文件名为demo3.txt,内容如下:

“`

This is the first line of the file.

This is the second line of the file.

This is the third line of the file.

This is the fourth line of the file.

This is the fifth line of the file.

“`

假设我们想要在这个文件的每一行后面添加一个句号。我们可以使用以下命令:

“`

sed ‘s/$/./g’ demo3.txt

“`

这个命令使用了一个叫做”替换”的sed命令。在这里,我们将每一行末尾的行尾符号替换成一个句号。在这个命令中,$表示每一行的末尾,而g选项表示全局替换。

当我们执行这个命令后,我们会发现输出结果如下:

“`

This is the first line of the file.

This is the second line of the file.

This is the third line of the file.

This is the fourth line of the file.

This is the fifth line of the file.

“`

在本文中,我们介绍了sed工具的几个功能和用法。我们使用了三个测试文件,分别演示了删除整个文本,删除包含特殊字符的行,和在每一行末尾添加一个句号的功能。

总体来说,sed是一个功能强大的文本编辑工具,能够快速、高效地处理大量的文本数据。由于使用了命令行的方式,它也非常适合在自动化脚本中使用。我希望本文能够帮助您更好地了解sed工具的用法。

相关问题拓展阅读:

linux shell sed命令用法

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

llo

帮你试过了神链皮孝

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

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

修改为:

A=hello

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

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

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

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

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

是这个语法…

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 测试文件的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux Sed工具测试文件的应用 (linux sed 测试文件)