前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sed工具(一) 原

sed工具(一) 原

作者头像
阿dai学长
发布2019-04-03 11:26:31
4300
发布2019-04-03 11:26:31
举报
文章被收录于专栏:阿dai_linux阿dai_linux

9.4-9.5 sed命令

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed用法

使用sed可以实现grep的大部分功能,而且还可以查找替换。

语法: sed [options] 'command' filename sed [options] -f scriptfile filename

Options: -n:-n选项和p命令一起使用表示打印 -e:等价于--expression,多点编辑,在一行执行多条命令

eg:

  • 用sed实现匹配(grep)功能=打印有root字符串的行
代码语言:javascript
复制
[root@adai003 sed]# sed -n '/root/'p test.txt
root:x:0:0:roprot:/root:/bin/bash

[root@adai003 sed]# sed -nr '/o+t/'p test.txt  (当‘//’中间有特殊字符时需要脱义,使用脱义符‘\’或使用-r表示脱义,等同于egrep)
root:x:0:0:roprot:/root:/bin/bash
Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c
pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin

忽略大小写(I)

代码语言:javascript
复制
[root@adai003 sed]# sed -n '/nologin/'Ip test.txt  忽略大小写
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
……
  • 打印指定行(p)
代码语言:javascript
复制
[root@adai003 sed]# sed -n '2'p test.txt  打印第二行
bin:x:1:1:bin:/bin:/sbin/Nologin

[root@adai003 sed]# sed -n '2,4'p test.txt
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c

[root@adai003 sed]# sed -n '7,$'p test.txt
pcp:x:996:994:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target

打印所有内容:
[root@adai003 sed]# sed -n p test.txt 
(内容太多不做演示)
  • -e选项允许在同一行里执行多条命令:
代码语言:javascript
复制
[root@adai003 sed]# sed -e '1'p -e '/daemon/'p -n test.txt
root:x:0:0:roprot:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@adai003 sed]# sed -e '1'p -e '/root/'p -n test.txt
root:x:0:0:roprot:/root:/bin/bash
root:x:0:0:roprot:/root:/bin/bash

解析: “sed -e '1'p -e '/daemon/'p -n test.txt”该命令的意思是:打印第一行,同时也打印出匹配有‘daemon’的行。当打印的内容和匹配的内容相同时,会分别显示,即:两个命令同时进行但相对独立。

  • 删除指定行(d)
代码语言:javascript
复制
[root@adai003 sed]# sed '3,$'d test.txt
root:x:0:0:roprot:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin

注: 这种方法并不会删除文件的内容,知识打印在屏幕上的内容删除了指定行。那么如何直接删除文件中指定的内容呢?如下:

代码语言:javascript
复制
[root@adai003 sed]# wc -l test.txt
12 test.txt
[root@adai003 sed]# sed -i '3,$'d test.txt
[root@adai003 sed]# wc -l test.txt
2 test.txt

[root@adai003 sed]# cat test.txt
root:x:0:0:roprot:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin

[root@adai003 sed]# sed -i '/root/'d test.txt
[root@adai003 sed]# cat !$
cat test.txt
bin:x:1:1:bin:/bin:/sbin/Nologin
  • 查找替换(s) 类似于vim中的查找替换
代码语言:javascript
复制
[root@adai003 sed]# sed '1,3s/root/ROOT/g' test.txt |head -3
ROOT:x:0:0:roprot:/ROOT:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
注:此处如果不使用head命令,将会显示test.txt全部内容。

替换每行第一个字符串和最后一个字符串的位置:

代码语言:javascript
复制
替换前:
[root@adai003 sed]# head -3 test.txt 
root:x:0:0:roprot:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/Nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
替换后:
[root@adai003 sed]# head -3 test.txt |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'
/bin/bash:x:0:0:roprot:/root:root
/sbin/Nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon

说明: 小括号内的字符串可以用反斜杠跟数字组合按顺序来代替。

删除内容(替换为空即可)

代码语言:javascript
复制
[root@adai003 sed]# head -3 test.txt |sed -r 's@[a-zA-Z]@@g'
::0:0::/://
::1:1::/://
::2:2::/://

在每一行行首添加指定字符:

代码语言:javascript
复制
[root@adai003 sed]# head -3 test.txt |sed -r 's/(.*)/A:&/'
A:root:x:0:0:roprot:/root:/bin/bash
A:bin:x:1:1:bin:/bin:/sbin/Nologin
A:daemon:x:2:2:daemon:/sbin:/sbin/nologin

说明: 在此&代表前面括号中的内容=“\ 1”

代码语言:javascript
复制
[root@adai003 sed]# head -3 test.txt |sed -r 's/(.*)/A:\1/'
A:root:x:0:0:roprot:/root:/bin/bash
A:bin:x:1:1:bin:/bin:/sbin/Nologin
A:daemon:x:2:2:daemon:/sbin:/sbin/nologin

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/07/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.4-9.5 sed命令
    • sed用法
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档