ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

文本三剑客之sed

2020-04-21 10:04:06  阅读:215  来源: 互联网

标签:三剑客 seq passwd etc sed 文本 root centos8


格式:sed [option]... 'script;script;...' inputfile... 常用选项:
-n      不输出模式空间内容到屏幕,即不自动打印;仅显示script处理后的结果
-e      多点编辑
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件
-f      /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件
-r, -E  使用扩展正则表达式
-i.bak  备份文件并原处编辑
-i      直接修改读取的文件内容,而不是输出到终端 script 格式:
'地址命令' 地址格式:
1. 不给地址:对全文进行处理
2. 单地址:
   #:指定的行    $:最后一行
   /pattern/:被此处模式所能够匹配到的每一行
3. 地址范围:
   #,#           #从#行到第#行,3,6 从第3行到第6行
   #,+#          #从#行到+#行,3,+4 表示从3行到第7行
   /pat1/,/pat2/
   #,/pat/
4. 步进:
   1-2  奇数行
   2-2  偶数行 命令:
p               打印当前模式空间内容,追加到默认输出之后
Ip              忽略大小写输出
d               删除模式空间匹配的行,并立即启用下一轮循环       nl /etc/passwd | sed -e '2,5d' 将 /etc/passwd 的内容列出并且列印行号,同时将第2-5行删除
a [\\]text      在指定行后面追加文本,支持使用换行\n实现多行追加   sed -e 4a\newline testfile  使用sed 在第四行后添加新字符串
                另起行用\结尾可以多行打字
i [\\]text      在行前面插入文本
c [\\]text      替换行为单行或多行文本                            nl /etc/passwd | sed '2,5c No 2-5 number'
w /path/file    保存模式匹配的行至指定文件
r /path/file    读取指定文件的文本至模式空间中匹配到的行后
=               为模式空间中的行打印行号
!               模式空间中匹配行取反处理
s/pattern/string/修饰符               查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###替换修饰符:
g               行内全局替换
p               显示替换成功的行
w   /PATH/FILE  将替换成功的行保存至文件中
I,i             忽略大小写 范例:
sed -r '{s/^.*#.*//g;/^$/d}' httpd.conf  读取文件主要内容,排除注释 范例:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行,q退出 范例:
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt   利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 ! 范例:
[root@www ~]# sed -i '$a # This is a test' regular_express.txt    利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test 范例:
[root@centos8 ~]#sed ''
welcome
welcome
to
to
magedu
magedu [root@centos8 ~]#sed '' /etc/issue
\S
Kernel \r on an \m [root@centos8 ~]#sed 'p' /etc/issue
\S
\S
Kernel \r on an \m
Kernel \r on an \m [root@centos8 ~]#sed -n '' /etc/issue [root@centos8 ~]#sed -n 'p' /etc/issue
\S
Kernel \r on an \m [root@centos8 ~]#sed -n '1p' /etc/passwd          < 取出passwd里面第一行 >
root:x:0:0:root:/root:/bin/bash [root@centos8 ~]#ifconfig eth0 | sed '2p'
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
       inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255
       inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255
       inet6 fe80::20c:29ff:fe45:a8a1 prefixlen 64 scopeid 0x20<link>
       ether 00:0c:29:45:a8:a1 txqueuelen 1000 (Ethernet)
       RX packets 89815 bytes 69267453 (66.0 MiB)
       RX errors 0 dropped 0 overruns 0 frame 0
       TX packets 115634 bytes 79827662 (76.1 MiB)
       TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@centos8 ~]#ifconfig eth0 | sed -n '2p'
       inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255
       
[root@centos8 ~]#sed -n '$p' /etc/passwd        < 取出passwd里面最后一行 >
postfix:x:89:89::/var/spool/postfix:/sbin/nologin [root@centos8 ~]#ifconfig eth0 |sed -n '/netmask/p'
       inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255 [root@centos8 ~]#df | sed -n '/^\/dev\/sd/p'
/dev/sda2      104806400 4872956  99933444   5% /
/dev/sda3       52403200  398860  52004340   1% /data
/dev/sda1         999320  848568     81940  92% /boot [root@centos8 ~]#seq 10 | sed -n '3,6p'
3
4
5
6 [root@centos8 ~]#seq 10 | sed -n '3,+4p'
3
4
5
6
7 [root@centos8 ~]#seq 10 | sed -n '3,$p'
3
4
5
6
7
8
9
10 [root@centos8 ~]#seq 10 |sed -n '1~2p'
1
3
5
7
9 [root@centos8 ~]#seq 10 |sed -n '2~2p'
2
4
6
8
10 [root@centos8 ~]#seq 10 |sed   '1~2d'
2
4
6
8
10 [root@centos8 ~]#seq 10 |sed   '2~2d'
1
3
5
7
9 [root@centos8 ~]#sed -e '2d' -e '4d' seq.log
1
3
5
6
7
8
9
10 [root@centos8 ~]#sed '2d;4d' seq.log
1
3
5
6
7
8
9
10 [root@centos8 ~]#sed -i.orig '2d;4d' seq.log [root@centos8 ~]#cat seq.log.orig
1
2
3
4
5
6
7
8
9
10 [root@centos8 ~]#cat seq.log
1
3
5
6
7
8
9
10 [root@centos8 ~]#seq 10 > seq.log [root@centos8 ~]#sed -i.orig '2d;4d' seq.log [root@centos8 ~]#sed -i   '/^listen 9527/a listen 80 \nlisten 8080'
/etc/httpd/conf/httpd.conf
#删除所有以#开头的行 [root@centos8 ~]#sed -i '/^#/d' fstab
#只显示非#开头的行 [root@centos8 ~]#sed -n '/^#/!p' fstab
#修改网卡配置 [root@centos8 ~]#sed -Ei.bak '/^GRUB_CMDLINE_LINUX/s/(.*)(")$/\1
net.ifnames=0\2/' /etc/default/grub 范例:
sed  '2p' /etc/passwd
sed  -n '2p' /etc/passwd
sed  -n '1,4p' /etc/passwd
sed  -n '/root/p' /etc/passwd
sed  -n '2,/root/p' /etc/passwd 从2行开始
sed  -n '/^$/=' file 显示空行行号
sed  -n  -e '/^$/p' -e '/^$/=' file
Sed  '/root/a\superman' /etc/passwd行后
sed  '/root/i\superman' /etc/passwd 行前
sed  '/root/c\superman' /etc/passwd 代替行
sed  '/^$/d' file
sed  '1,10d'   file
nl   /etc/passwd | sed '2,5d'
nl   /etc/passwd | sed '2a tea'
sed  's/test/mytest/g' example
sed  -n 's/root/&superman/p' /etc/passwd 单词后
sed  -n 's/root/superman&/p' /etc/passwd 单词前
sed  -e 's/dog/cat/' -e 's/hi/lo/' pets 
sed  -i.bak  's/dog/cat/g' pets 范例:取IP 地址
[root@centos8 ~]#ifconfig eth0 |sed -nr "2s/[^0-9]+([0-9.]+).*/\1/p" 
10.0.0.8 [root@centos8 ~]#ifconfig eth0 | sed -rn '2s/^[^0-9]+([0-9.]+) .*$/\1/p'
10.0.0.8 [root@centos8 ~]#ifconfig eth0 | sed -n '2s/^.*inet //p' | sed -n 's/netmask.*//p'
10.0.0.8 [root@centos8 ~]#ifconfig eth0 | sed -n '2s/^.*inet //;s/ netmask.*//p'
10.0.0.8 [root@centos8 ~]#ifconfig eth0 | sed -rn '2s/(.*inet )([0-9].*)(netmask.*)/\2/p'
10.0.0.8 范例:取基名和目录名
echo "/etc/sysconfig/network-scripts/" |sed -r 's#(^/.*/)([^/]+/?)#\2#' 取基名
echo "/etc/sysconfig/network-scripts/" |sed -r 's#(^/.*/)([^/]+/?)#\1#' 取目录
#取目录名
[root@centos8 ~]#echo /etc/sysconfig/ | sed -rn 's#(.*)/([^/]+)/?#\1#p'
/etc
#取基名
[root@centos8 ~]#echo /etc/sysconfig/ | sed -rn 's#(.*)/([^/]+)/?#\2#p'
sysconfig 范例:将非#开头的行加#
[root@centos8 ~]#sed -rn "s/^[^#]/#&/p"   /etc/fstab
#UUID=1b950ef9-7142-46bd-975c-c4ac1e0d47e8 /                       xfs   
defaults       0 0
#UUID=667a4c81-8b4b-4a39-a111-b11cb6d09309 /boot                   ext4 
defaults       1 2
#UUID=38d14714-c018-41d5-922c-49e415decbca /data                   xfs   
defaults       0 0
#UUID=a0efb2bb-8227-4317-a79d-0a70d515046c swap                   swap 
defaults       0 0 [root@centos8 ~]#sed -rn 's/^[^#](.*)/#\1/p' /etc/fstab
#UID=1b950ef9-7142-46bd-975c-c4ac1e0d47e8 /                       xfs   
defaults       0 0
#UID=667a4c81-8b4b-4a39-a111-b11cb6d09309 /boot                   ext4 
defaults       1 2
#UID=38d14714-c018-41d5-922c-49e415decbca /data                   xfs   
defaults       0 0
#UID=a0efb2bb-8227-4317-a79d-0a70d515046c swap                   swap 
defaults       0 0 [root@centos8 ~]#sed -rn '/^#/!s@^@#@p' /etc/fstab
#
#UUID=1b950ef9-7142-46bd-975c-c4ac1e0d47e8 /                       xfs   
defaults       0 0
#UUID=667a4c81-8b4b-4a39-a111-b11cb6d09309 /boot                   ext4 
defaults       1 2
#UUID=38d14714-c018-41d5-922c-49e415decbca /data                   xfs   
defaults       0 0
#UUID=a0efb2bb-8227-4317-a79d-0a70d515046c swap                   swap 
defaults       0 0 范例:将#开头的行删除#
[root@centos8 ~]#sed -ri.bak '/^#/s/^#//' /etc/fstab 范例:取分区利用率
[root@centos8 ~]#df | sed -nr '/^\/dev\/sd/s# .* ([0-9]+)%.*# \1#p'
/dev/sda2 3
/dev/sda5 1
/dev/sda1 14 范例:修改内核参数
[root@centos8 ~]#sed -nr '/^GRUB_CMDLINE_LINUX/s/"$/ net.ifnames=0"/p'
/etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=8363289d-138e-4e4a-abaf6e028babc924 rhgb quiet net.ifnames=0" [root@centos8 ~]#sed -rn '/^GRUB_CMDLINE_LINUX=/s@(.*)"$@\1 net.ifnames=0"@p'
/etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=a0efb2bb-8227-4317-a79d0a70d515046c rhgb quiet net.ifnames=0" [root@centos8 ~]#sed -rn '/^GRUB_CMDLINE_LINUX=/s@"$@ net.ifnames=0"@p'
/etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto resume=UUID=a0efb2bb-8227-4317-a79d0a70d515046c rhgb quiet net.ifnames=0 net.ifnames=0" 范例:修改网卡名称
[root@centos8 ~]#sed -ri '/^GRUB_CMDLINE_LINUX=/s@"$@ net.ifnames=0"@'
/etc/default/grub #centos7,8
[root@centos8 ~]#grub2-mkconfig -o /boot/grub2/grub.cfg #ubuntu
[root@ubuntu ~]#grub-mkconfig -o /boot/grub/grub.cfg 范例:查看配置文件
sed  -r  '/^(#|$)/d' /etc/httpd/conf/httpd.conf
sed  -r  '/^#|^$/d' /etc/httpd/conf/httpd.conf 范例:引用变量
[root@centos8 ~]#echo|sed "s/^/$RANDOM.rmvb/"
5242.rmvb [root@centos8 ~]#echo|sed 's/^/$RANDOM.rmvb/'
$RANDOM.rmvb [root@centos8 ~]#echo|sed 's/^/'''$RANDOM'''.rmvb/ 范例:修改配置文件
[root@centos6 ~]#sed   -e '/^#<VirtualHost/,/^#<\/VirtualHost>/s@#@@' -e '/^#NameVirtualHost/s@#@@' /etc/httpd/conf/httpd.conf
@@@@@@@@ sed 高级用法 sed 中除了模式空间,还另外还支持保持空间(Hold Space),利用此空间,可以将模式空间中的数
据,临时保存至保持空间,从而后续接着处理,实现更为强大的功能。
常见的高级命令: P 打印模式空间开端至\n内容,并追加到默认输出之前
h 把模式空间中的内容覆盖至保持空间中
H 把模式空间中的内容追加至保持空间中
g 从保持空间取出数据覆盖至模式空间
G 从保持空间取出内容追加至模式空间
x 把模式空间中的内容与保持空间中的内容进行互换
n 读取匹配到的行的下一行覆盖至模式空间
N 读取匹配到的行的下一行追加至模式空间
d 删除模式空间中的行
D 如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。    如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环   范例:
sed -n 'n;p' FILE
sed '1!G;h;$!d' FILE
sed ‘N;D’FILE
seq 10 |sed  '3h;9G;9!d'
sed '$!N;$!D' FILE
sed '$!d' FILE
sed ‘G’ FILE
sed ‘g’ FILE
sed ‘/^$/d;G’ FILE
sed 'n;d' FILE
sed -n '1!G;h;$p' FILE

标签:三剑客,seq,passwd,etc,sed,文本,root,centos8
来源: https://www.cnblogs.com/shenyuanhaojie/p/12742583.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有