sed
逐行读取内容到模式空间内,进行匹配编辑操作,若不匹配直接输出到屏幕
常用选项:
-n 不输出模式空间的内容到屏幕
-e 可以指定多个编辑命令
-f /PATH/TO/SED_SCRIPT_FILE
每行一个编辑命令
-r 支持扩展正则表达式
-i 直接编辑源文件
地址定界:
1) 不提供地址: 对全文进行处理(空地址)
2) 单地址:
# 指定行
/pattern/ :被此模式匹配到的每一行
3) 地址范围:
num1,num2 起始行到结束行
num1,+num2 起始行+#行
num,/pattern/ #开始到/pattern/结束
/pattern/,/pattern/
4) 步进 ~
1~2 表示从第一行开始,每次前进2行 所有奇数行
[[email protected] network-scripts]# cat -n ifcfg-ens33
1 TYPE=Ethernet
2 BOOTPROTO=static
3 DEFROUTE=yes
4 NAME=ens33
5 DEVICE=ens33
6 ONBOOT=yes
7 IPADDR=172.20.1.11
8 NETMASK=255.255.255.0
9 GATEWAY=172.20.1.254
[[email protected] network-scripts]# sed -n '1~2p' ifcfg-ens33
TYPE=Ethernet
DEFROUTE=yes
DEVICE=ens33
IPADDR=172.20.1.11
GATEWAY=172.20.1.254
[[email protected] network-scripts]# sed -n '2~2p' ifcfg-ens33
BOOTPROTO=static
NAME=ens33
ONBOOT=yes
NETMASK=255.255.255.0
编辑命令:
d 删除匹配到的行
sed '1,8d' /etc/fstab
p 打印匹配到的行
sed -n '1~2p' /etc/fstab
a 在匹配到的行后追加文本,支持使用\n实现多行追加
sed '${num1}a \new line' /etc/fstab
i 在模式匹配到的行前面插入文本
sed '${num1}i \new line' /etc/fstab
c \text 把匹配到的行替换成text 内容
sed '/fstab/c \new line' /etc/fstab
w /PATH/TO/SOMEFILE 保存匹配到的行到指定文件中
sed '/^[^#]/w /tmp/fstab' /etc/fstab
r /PATH/FROM/SOMEFILE 读取指定文件到匹配到的行后面,实现文件合并
sed '3r /etc/issue' /etc/fstab
= 为匹配到的行打印行号
sed '/^UUID/=' /etc/fstab
! 条件取反
sed '/^#/!d' /etc/fstab
sed '地址定界!编辑命令'
s/// 查找替换,分隔符可自行指定常用有[email protected]@@,s###,s%%%
替换标记
g 全局替换
w /PATH/TO/SOMEFILE 替换成功的结果保存至文件中
p 只显示替换成功的行
sed 's/^[[:space:]]\+//' /etc/grub2.cfg
sed 's/^#[[:space:]]*//' /etc/fstab
sed -e 's/^#[[:space:]]*//' -e '/^UUID/d' /etc/fstab
~]# echo /var/log/message/ |sed -r 's#[^/]+/?$##'
/var/log/
高级编辑命令
h 把模式空间中的内容覆盖到保持空间
H 把模式空间中的内容追加到保持空间
g 把保持空间中的内容覆盖到模式空间
G 把保持空间中的内容追加到模式空间
x 把模式空间中的内容和保持空间互换
n 覆盖读取匹配到行的下一行至模式空间
N 追加读取匹配到行的下一行至模式空间
d 删除模式空间中的行
D 删除模式空间中的所有行
sed -n 'n;p' /etc/fstab # 显示偶数行
读取第一行,执行n读取下一行到模式空间,p显示模式空间内容,循环往复
sed '1!G;h;$!d' /etc/fstab
逆序显示文件内容
sed '$!d' FILE
原文地址:https://www.cnblogs.com/liy36/p/12147913.html
时间: 2024-11-23 16:55:48