命令行编辑器——sed在Linux系统中的应用
Linux操作系统是一种开源操作系统,拥有许多强大的功能和工具,其中一个重要的工具就是命令行编辑器sed。sed是Stream Editor的缩写,是一种非交互式的文本编辑器,能够通过命令行编辑文本文件,实现文本文件的替换、删除、添加、查询等多种编辑操作。在Linux系统中,sed是一种最常用的命令行工具之一,它能够有效地简化文本文件的处理过程,提高工作效率。本文将介绍sed工具的基本用法及其在Linux系统中的应用。
一、sed的基本使用方法
sed命令的基本格式为:
$ sed [选项] ‘编辑命令’ 文件名
其中,选项包括:
-i:直接修改文件内容而不是输出到终端显示;
-n:不显示处理过程输出;
-e:允许进行多个编辑操作;
-r或-E:使用扩展正则表达式;
基本编辑命令包括:
s命令:替换文本中的内容;
d命令:删除文本中的行;
p命令:打印匹配的文本行;
a命令:在文本的特定行之后添加一行文本;
i命令:在文本的特定行之前添加一行文本。
二、sed在Linux系统中的应用
1.文本内容的替换
在Linux系统中,我们可以使用sed命令对文本中的内容进行替换。例如,我们要将文本中的apple替换为orange,可以使用以下命令:
$ sed ‘s/apple/orange/g’ filename.txt
其中,s命令表示替换,g表示全部替换。这个命令会将filename.txt中所有的apple替换成orange。
2.删除指定行
使用sed也可以删除文本文件中的特定行。比如,我们要删除文件中第5行到第10行的内容,可以使用以下命令:
$ sed ‘5,10d’ filename.txt
其中,d命令表示删除,5,10表示删除第5行到第10行的内容。
3.文本内容的添加
在Linux系统中,我们也可以使用sed命令对文本中的内容进行添加。比如,我们要在第3行后添加一行内容,可以使用以下命令:
$ sed ‘3a\ This is a new line.’ filename.txt
其中,a命令表示在特定行之后添加一行文本,\用于转义。
4.文本中的搜索
使用sed也可以在文本中进行搜索。比如,我们要在文件filename.txt中搜索包含”apple”的行,可以使用以下命令:
$ sed -n ‘/apple/p’ filename.txt
其中,-n表示不显示处理过程的输出,/apple/p表示搜索包含”apple”的行并打印。
5.正则表达式的运用
sed能够支持扩展正则表达式的运用,可以极大地方便我们的文本编辑工作。比如,我们要使用扩展正则表达式来替换文本中的数字,可以使用以下命令:
$ sed -E ‘s/[0-9]+/#/g’ filename.txt
其中,-E表示使用扩展正则表达式,s/[0-9]+/#/g表示替换文本中的数字为#。
结语
sed是Linux系统中非常常用的命令行文本编辑器,其强大的编辑功能与简单的使用方式相结合,使得我们能够更快捷地对文本文件进行编辑操作。在平时的工作中,深入掌握sed命令的使用方法及其应用领域,能够提高我们的工作效率,实现更加便捷的文本编辑。
成都网站建设公司-创新互联为您提供网站建设、网站制作、网页设计及定制高端网站建设服务!
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::
是这个语法…
$ 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/’
sed的linux的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于sed的linux,命令行编辑器——sed在linux系统中的应用,linux shell sed命令用法的信息别忘了在本站进行查找喔。
创新互联(cdcxhl.com)提供稳定的云服务器,香港云服务器,BGP云服务器,双线云服务器,高防云服务器,成都云服务器,服务器托管。精选钜惠,欢迎咨询:028-86922220。
分享名称:命令行编辑器——sed在linux系统中的应用(sed的linux)
网页链接:http://www.mswzjz.cn/qtweb/news10/393260.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能