8月9日 文本处理工具sed

1、用法

sed[option]... 'script' inputfile...
常用选项:
-n:不输出模式空间内容到屏幕,即不自动打印
-e: 多点编辑
-f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r: 支持使用扩展正则表达式
-i.bak: 备份文件并原处编辑
script:
'地址命令'

2、地址定界

地址定界:
(1) 不给地址:对全文进行处理
(2) 单地址:
#: 指定的行
/pattern/:被此处模式所能够匹配到的每一行
(3) 地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步进
1~2 奇数行
2~2 偶数行

3、编辑命令

d: 删除模式空间匹配的行,并立即启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
a []text:在指定行后面追加文本,支持使用\n实现多行追加
i[]text:在行前面插入文本
c []text:替换行为单行或多行文本
w /path/somefile: 保存模式匹配的行至指定文件
r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后
=: 为匹配的模式空间中的行打印行号
!:模式空间中匹配行取反处理

4、查找替换

s///:查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g: 行内全局替换
p: 显示替换成功的行
w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

5、sed的高级编辑命令

P:打印模式空间开端至\n内容,并追加到默认输出之前
h: 把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g: 从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x: 把模式空间中的内容与保持空间中的内容进行互换
n: 读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
d: 删除模式空间中的行
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间

6、举例

[root@centos6 app]#seq 11 |sed -n '1~2p'   ---打印奇数行
1
3
5
7
9
11
[root@centos6 app]#seq 11 |sed -n '2~2p'
2
4
6
8
10
[root@centos6 app]#seq 5|sed 'axy'
1
xy
2
xy
3
xy
4
xy
5
xy
[root@centos6 app]#seq 5|sed 'a\ xy'   ---\加不加都可以,但加上有的时候可以前面多个空格
1
 xy
2
 xy
3
 xy
4
 xy
5
 xy
[root@centos6 app]#seq 5|sed '2,4axyz'
1
2
xyz
3
xyz
4
xyz
5
[root@centos6 app]#seq 5|sed '2axyz\n====\n++++'  ---\n可以追加多行内容
1
2
xyz
====
++++
3
4
5
[root@centos6 ~]#sed '/^# Source/i alias yi="yum install"' .bashrc
# .bashrc

# User specific aliases and functions
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias p='poweroff'
alias cdpack='cd /misc/cd/Packages/'
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias yi="yum install"  ---在指定行的前面插入内容
# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi
[root@centos6 ~]#sed '/^SELINUX=enforcing/cSELINUX=permissive' /etc/selinux/config  ---替换

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 
[root@centos6 ~]#seq 5|sed '2,4w /app/f1'  ---保存模式空间的内容到指定文件
1
2
3
4
5
[root@centos6 ~]#cd /app
[root@centos6 app]#ls
f1  mkdvdiso.sh
[root@centos6 app]#cat f1
2
3
4
[root@centos6 app]#seq 5|sed '3r /etc/issue'  ---读取文件中的内容到指定的行后
1
2
3
CentOS release 6.9 (Final)
Kernel \r on an \m
\l
\n
\t
4
5
[root@centos6 app]#sed -e '/^#/d' -e '/^$/d' /etc/fstab  ---多点编辑,表示以#开头的行和空行删除
UUID=07e3094b-c50d-4568-aee5-b2f76d91c962 /                       ext4    defaults        1 1
UUID=4a2031c3-8595-489e-bc6d-1e2c31860c7b /app                    ext4    defaults        1 2
UUID=a056e3b8-7cc2-4aea-9308-9b0744741394 /boot                   ext4    defaults        1 2
UUID=953b7594-f906-4d3e-8a3a-a6bb79b1c900 swap                    swap    defaults        0 0
UUID=d027885d-e32b-42e7-94aa-329130282748 /home                   ext4    usrquota,grpquota        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@centos6 app]#vim sed.txt
  1 /^s/d
[root@centos6 app]#cat f2
bbbdddd
sdfgggg
1234445
[root@centos6 app]#sed -f sed.txt f2  ---调用文件中的脚本
bbbdddd
1234445
[root@centos6 app]#sed -n 's/ext4/xfs/p' /etc/fstab   --- -p表示只打印匹配成功的行
UUID=07e3094b-c50d-4568-aee5-b2f76d91c962 /                       xfs    defaults        1 1
UUID=4a2031c3-8595-489e-bc6d-1e2c31860c7b /app                    xfs    defaults        1 2
UUID=a056e3b8-7cc2-4aea-9308-9b0744741394 /boot                   xfs    defaults        1 2
UUID=d027885d-e32b-42e7-94aa-329130282748 /home                   xfs    usrquota,grpquota        0 0
[root@centos6 app]#sed -nr 's/(bash)$/\1er/pg' p1---分组和后向引用
root:x:0:0:root:/root:/bin/basher
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/basher
zhang:x:500:500::/home/zhang:/bin/basher
tom:x:504:505::/home/tom:/bin/basher
libai:x:510:510::/home/libai:/bin/basher
dufu:x:512:512::/home/dufu:/bin/basher
zhaoritian:x:514:514::/home/zhaoritian:/bin/basher
gentoo:x:515:501:Gentoo Distribution:/home/gentoo:/bin/basher
natasha:x:516:516::/home/natasha:/bin/basher
harry:x:517:504::/home/harry:/bin/basher
alice:x:518:518::/home/alice:/bin/basher
bash:x:519:520::/home/bash:/bin/basher
testbash:x:520:521::/home/testbash:/bin/basher
sh:x:521:522::/home/sh:/bin/basher
[root@centos6 app]#sed -nr 's/bash$/&er/pg' p1 ---可以用&代替前面匹配的内容
root:x:0:0:root:/root:/bin/basher
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/basher
zhang:x:500:500::/home/zhang:/bin/basher
tom:x:504:505::/home/tom:/bin/basher
libai:x:510:510::/home/libai:/bin/basher
dufu:x:512:512::/home/dufu:/bin/basher
zhaoritian:x:514:514::/home/zhaoritian:/bin/basher
gentoo:x:515:501:Gentoo Distribution:/home/gentoo:/bin/basher
natasha:x:516:516::/home/natasha:/bin/basher
harry:x:517:504::/home/harry:/bin/basher
alice:x:518:518::/home/alice:/bin/basher
bash:x:519:520::/home/bash:/bin/basher
testbash:x:520:521::/home/testbash:/bin/basher
sh:x:521:522::/home/sh:/bin/basher
[root@centos6 app]#ifconfig eth2|sed -n -e '2s/^.*addr://' -e '2s/ .*$//p'  ---取出IP地址
192.168.25.179
[root@centos6 app]#ifconfig eth2|sed '2!d;s/^.*addr://;s/ .*$//'   ---分号表示可以执行多次操作
192.168.25.179
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,131评论 2 34
  • Sed工具工作原理及特性 1. sed是流编辑器,每一次读取一行到内存中,即称之为模式空间(pattern spa...
    魏镇坪阅读 10,921评论 0 12
  • sed的定义和功能:sed是一种行编辑器,也是一个管线命令,可以分析 standard input,而且 sed还...
    会玩linux不阅读 295评论 0 0
  • 本文承接之前写的三十分钟学会AWK一文,在学习完AWK之后,趁热打铁又学习了一下SED,不得不说这两个工具真的堪称...
    mylxsw阅读 4,382评论 3 74
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,858评论 6 13