Linux sed命令详解
文章目录简介参数使用实列向文件中添加或插入行更改文件中指定的行删除文件中的行替换文件中的内容打印文件中的行打印文件中行号从文件中读取内容向文件中写入内容简介Sed是非交互式的编辑器,用来对文本进行过滤和替换操作,它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。参数sed的常用选项:-e他告诉sed将下一个参数解释为一个sed指令,...
·
简介
Sed是非交互式的编辑器,用来对文本进行过滤和替换操作,它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。
参数
sed的常用选项: -e 他告诉sed将下一个参数解释为一个sed指令,只有命令行上给出多个sed指令时需要-e选项 -f 后跟保存了sed指令的文件 -n 取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行 -i 直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改 sed中编辑命令: -a 追加 向匹配行后面插入内容 -c 更改 更改匹配行的内容 -i 插入 向匹配行前插入内容 -d 删除 删除匹配行内容 -s 替换 替换匹配的内容 -p 打印 打印匹配行内容,通常与-n和用 = 打印匹配的行号 r 用用将内容读入文件 w 用与将匹配内容写入文件
使用实列
向文件中添加或插入行
#向第三行后面添加Hello [root@boke home]# sed '3aHello' 2.test aaaaaa bbbbbb cccccc Hello dddddd
#在最后一行加入Hello [root@boke home]# sed '$aHello' 3.test aaaaaa bbbbbb cccccc dddddd eeeeee dddddd Hello
#向内容cccccc前面添加heelo,如果文件中有多行包括cccccc,则每一行后面都会添加 [root@boke home]# sed '/cccccc/ahello' 5.test aaaaaa bbbbbb cccccc hello
更改文件中指定的行
#将文件第一行替换成hello [root@boke home]# sed '1chello' 1.test hello bbbbbb cccccc
#将包含文件ddd的行替换为hello [root@boke home]# sed '/ddd/chello' 1.test aaaaaa bbbbbb cccccc hello
#将最后一行替换为word [root@boke home]# sed '$cword' 1.test aaaaaa bbbbbb cccccc dddddd eeeeee word
删除文件中的行
#删除文件第二行 [root@boke home]# sed '2d' 1.test aaaaaa cccccc dddddd eeeeee
#删除文件1,2行 [root@boke home]# sed '1,2d' 1.test cccccc dddddd eeeeee
#删除文件最后一行 [root@boke home]# sed '$d' 1.test aaaaaa bbbbbb cccccc
#删除匹配aaa的行 [root@boke home]# sed '/aaa/d' 1.test bbbbbb cccccc dddddd
#删除1~2之外的所有行 [root@boke home]# sed '1,2!d' 1.test aaaaaa bbbbbb
#删除空行 [root@boke home]# cat 1.test aaaaaa bbbbbb cccccc [root@boke home]# sed '/^$/d' 1.test aaaaaa bbbbbb cccccc
#删除不匹配aa或bb的所有行 [root@boke home]# cat 2.test aaaaaa bbbbbb cccccc dddddd eeeeee dddddd [root@boke home]# sed '/aa\|bb/!d' 2.test aaaaaa bbbbbb
替换文件中的内容
#将文本123替换为word,默认只替换每行第一个 [root@boke home]# cat 3.test aaabbb 123 123 cccccc 234 [root@boke home]# sed 's/123/word/' 3.test aaabbb word 123 cccccc 234
#将文本中所有123行替换为word [root@boke home]# cat 3.test aaabbb 123 123 cccccc 234 [root@boke home]# sed 's/123/word/g' 3.test aaabbb word word cccccc 234
#将每行中第二个匹配的123替换为hello [root@boke home]# cat 3.test aaabbb 123 123 cccccc 234 [root@boke home]# sed 's/123/word/2' 3.test aaabbb 123 word cccccc 234
#将每行所有匹配的123替换为word,并将替换后内容写入3.txt [root@boke home]# cat 3.test aaabbb 123 123 cccccc 123 [root@boke home]# sed -n 's/123/word/gpw 3.txt' 3.test word word word
#删除#号注释 [root@boke home]# cat 5.test #aaaaaa #bbbbbb #cccccc #dddddd [root@boke home]# sed 's/^#//' 5.test aaaaaa bbbbbb cccccc dddddd
#删除文本中的空格行 [root@boke home]# cat 5.test #aaaaaa #bbbbbb #cccccc #dddddd [root@boke home]# sed '/^$/d' 5.test #aaaaaa #bbbbbb #cccccc #dddddd [root@boke home]# ^C [root@boke home]#
打印文件中的行
#打印文件中第2行内容 [root@boke home]# cat 2.test aaaaaa bbbbbb cccccc dddddd eeeeee dddddd [root@boke home]# sed -n '3p' 1.test bbbbbb
#打印文件最后一行 [root@boke home]# cat 1.test aaaaaa bbbbbb cccccc [root@boke home]# sed -n '$p' 1.test cccccc
#打印文件1~3行 [root@boke home]# cat 2.test aaaaaa bbbbbb cccccc dddddd eeeeee dddddd [root@boke home]# sed -n '1,3p' 2.test aaaaaa bbbbbb cccccc
#打印文件3行到最后一行内容 [root@boke home]# cat 2.test aaaaaa bbbbbb cccccc dddddd eeeeee dddddd [root@boke home]# sed -n '3,$p' 2.test cccccc dddddd eeeeee dddddd
#逐行读取文件,打印匹配ddd的行 [root@boke home]# cat 2.test 1.aaaaaa 2.bbbbbb 3.cccccc 4.dddddd 5.eeeeee 6.dddddd [root@boke home]# sed -n '/dd/p' 2.test 4.dddddd 6.dddddd
#打印从匹配的cc行至最后一行内容 [root@boke home]# cat 2.test 1.aaaaaa 2.bbbbbb 3.cccccc 4.dddddd 5.eeeeee 6.dddddd [root@boke home]# sed -n '/cc/,$p' 2.test 3.cccccc 4.dddddd 5.eeeeee 6.dddddd
打印文件中行号
#打印文件的行号 [root@boke home]# wc -l 1.test 4 1.test [root@boke home]# sed -n '$=' 1.test 4
#打印匹配cc的行号 [root@boke home]# cat 2.test 1.aaaaaa 2.bbbbbb 3.cccccc 4.dddddd 5.eeeeee 6.dddddd [root@boke home]# sed -n '/cc/=' 2.test 3
#打印匹配cc行号及内容 [root@boke home]# cat 2.test 1.aaaaaa 2.bbbbbb 3.cccccc 4.dddddd 5.eeeeee 6.dddddd [root@boke home]# sed -n '/cc/{=;p}' 2.test 3 3.cccccc
从文件中读取内容
#将1.test内容,读入2.test中,会在1.test中的每一行后读入2.test内容 [root@boke home]# cat 1.test 111 222 333 [root@boke home]# cat 2.test aaa bbb ccc [root@boke home]# sed 'r 2.test' 1.test 111 aaa bbb ccc 222 aaa bbb ccc 333 aaa bbb ccc
#在1.test第2行插入2.test的内容 [root@boke home]# cat 1.test 111 222 333 [root@boke home]# cat 2.test aaa bbb ccc [root@boke home]# sed '2r 2.test' 1.test 111 222 aaa bbb ccc 333
#在1.test的最后一行插入2.test的内容 [root@boke home]# cat 1.test 111 222 333 [root@boke home]# cat 2.test aaa bbb ccc [root@boke home]# sed '$r 2.test' 1.test 111 222 333 aaa bbb ccc
向文件中写入内容
#将1.test文件的内容写入2.test,如果2.test文件不存在则创建,如果2.test存在则覆盖之前内容 [root@boke home]# cat 1.test 111 222 333 [root@boke home]# cat 2.test aaa bbb ccc [root@boke home]# cat 2.test 111 222
#将文件1.test中第二行写入2.test中 [root@boke home]# cat 1.test 111 222 333 [root@boke home]# cat 2.test aaa bbb ccc [root@boke home]# sed -n '2w 2.test' 1.test [root@boke home]# cat 2.test 222
#将1.test第一行与最后一行写入2.test中 [root@boke home]# cat 1.test 111 222 333 [root@boke home]# cat 2.test aaa bbb ccc [root@boke home]# sed -n -e '1w 2.test' -e '$w 2.test' 1.test [root@boke home]# cat 2.test 111 333
#将1.test中匹配123或abc的行内容,写入2.test、 [root@boke home]# cat 1.test 123 abc 345 123,aaa,abc,ddd123 [root@boke home]# sed -n '/123\|abc/w 2.test' 1.test [root@boke home]# cat 2.test 123 abc 123,aaa,abc,ddd123
#将1.test中匹配234的行到最后一行的内容写入2.test中 [root@boke home]# cat 1.test 111 234 aaa bbb ccc [root@boke home]# sed -n '/234/,$w 2.test' 1.test [root@boke home]# cat 2.test 234 aaa bbb ccc
est
111
333
#将1.test中匹配123或abc的行内容,写入2.test、 [root@boke home]# cat 1.test 123 abc 345 123,aaa,abc,ddd123 [root@boke home]# sed -n '/123\|abc/w 2.test' 1.test [root@boke home]# cat 2.test 123 abc 123,aaa,abc,ddd123
#将1.test中匹配234的行到最后一行的内容写入2.test中 [root@boke home]# cat 1.test 111 234 aaa bbb ccc [root@boke home]# sed -n '/234/,$w 2.test' 1.test [root@boke home]# cat 2.test 234 aaa bbb ccc
更多推荐
已为社区贡献1条内容
所有评论(0)