sed 命令用法
-n 不将模式空间的内容显示至屏幕
-i 之际对原文件按进行编辑操作
地址定界操作:
/parttern1/,/parttern2/ 从第一个匹配模式开始编辑 到第二个匹配模式出现然后停止操作
#,# 对第#行到#行进行操作
[root@bogon ~]# sed '1,8d' /etc/fstab
#,+# 对第#行到+#多少行的内容匹配进行操作
[root@bogon ~]# sed '1,+2d' /etc/fstab
/pattern/ 模式匹配操作 [root@bogon ~]# sed '/^UUID/d' /etc/fstab
步进匹配:
1~2: [root@bogon ~]# sed '1~2d' /etc/fstab
2~2:[root@bogon ~]# sed '2~2d' /etc/fstab
-p 打印匹配到的行值屏幕
[root@bogon ~]# sed '1~2p' /etc/fstab 打印步进为2的所有奇数行的内容至屏幕
--r /PATH/TO/SOMEFILE :读取指定文件的内容至当前文件被匹配的行后面;具有文件合并的功能
sed '3r /etc/issue' /etc/fstab 直接把另一个文件读入 /etc/fstab 文件的第三行以后
sed '/^UUID/r /etc/issue' /etc/fstab 在匹配到行UUID后面都添加/etc/issue文件内容
=:为模式匹配到的行打印行号
!:取反操作
a \text:在匹配到的行后面追加内容 [root@bogon ~]# sed '3a \xiaoqiang' /etc/fstab
sed '/^UUID/a \# add new device base on UUId' /etc/fstab
i \text :在匹配的行前面插入内容 [root@bogon ~]# sed '3i \xiaoqiang' /etc/fstab
c \text :将匹配到的行整行替换
[root@bogon ~]# sed '/^UUID/c \#add new device' /etc/fstab
s/// :全局替换,其分隔符可自行指定,常用的有s@@@ , s###等
替换标记:
g:全局替换
w /path/to/somefile:将替换成功的结果保存至指定文件中;
给文件开头都添加md字母 发现的特殊功能 暂时还不知道怎么理解正则匹配
[root@bogon ~]# sed 's@^[[:space:]]@@' /etc/grub2.cfg
将所有的空格都替换成空
------>>>>>
[root@bogon ~]# sed 's@^#[[:space:]]*@@' /etc/fstab
替换以#号开头的行匹配多次为什么都没有
[root@bogon ~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab
[root@bogon ~]# echo "/var/log/messages" | sed 's@[^/]\+$@@'
给出一个文件的全路径 过滤之后只显示文件的路径就可以
[root@bogon ~]# echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'
扩展正则的使用 [root@bogon ~]# echo "/var/log/messages/" | sed -r 's@[^/]+/?@@'
p:显示替换成功的行
sed 编辑文本的模型:
sed 高级命令部分
-h:将模式空间的内容覆盖到保持空间
-H:将模式空间的内容追加至保持空间
-g:将保持空间的内容覆盖至模式空间
-G:将保持空间的内容追加至模式空间
-x :将模式空间的内容与保持孔家的内容互换
-n:覆盖读取匹配到行的下一行至保持空间
-N:追加读取匹配到行的下一行至保持空间
-d:删除模式空间的行
-D:删除多行模式空间的所有行
[root@bogon ~]# sed -n "n;p" /etc/fstab ‘;’号是分割多条命令的
注解: 加上-n之后就不会重复显示模式空间内容了 sed命令开始的时候默认不加模式匹配时 都会从第一行读取文件内容
但是只要遇到条件 n --next的简写 就会匹配到第二行 然后把第二行的内容写入模式空间进行 p 打印出来
只显示偶数行的内容了
[root@bogon ~] # sed '1!G;h;$!d' /etc/fstab
命令实现的模型图:
上面的图解还是有一点的小误 如果看到的学者需要理解 不明白之处可以留言
[root@bogon ~]# sed '$!d' /etc/fstab
[root@bogon ~]# sed '$!N;$!D' /etc/fstab
逆序显示文件内容(等同于tac命令)
[root@bogon ~]# sed '/^$/d;G' /etc/fstab 删除原有的所有空白行,而后为所有的非空白行添加一个空白行
就是删除以空开始结尾的行 G然后将保持空间的值 追加至模式空间进行匹配显示
[root@bogon ~]# sed 'n;d' /etc/fstab
sed 读取文件内容 读取第一行 然后让第二行把第一行覆盖了 又执行删除操作 所有覆盖的第一行又出来了 以此类推 会显示奇数行的内容
[root@bogon ~]# sed 'G' /etc/fstab G 表示将保持空间的值追加至模式空间打印出来 在前面没有-n选项的情况下