文本工具三剑客:sed
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本工具三剑客:sed相关的知识,希望对你有一定的参考价值。
文本工具三剑客:sed
sde是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓存区,称为 模式空间
用法:
sed [选项] [加自己的语言] [要处理的文件]
选项:
-n 不输出模式中的内容至屏幕
# sed -n "10p" f2 只打印出第10行匹配到的行 其他不显示
10 UUID=07a475f4-3d7a-4b27-9ec9-500bc8a19c4d /boot
-e 多点编辑
-f 指定文件中读取编辑脚本
-r 支持使用扩展正则表达式
-i 原处编辑
Script:
地址命令
地址定界:
(1)不给地址:对全文进行处理
(2)单地址:
# 指定的行
/模式/ 被此处模式所能够匹配到的每一行
(3)地址范围
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4)~: 步进
1~2 奇数行
2~2 偶数行
sed 编辑命令
d 删除模式空间匹配的行
sed "10d" f2 删除f2的第10行 不是直接删除文件的第10行
p 显示模式空间中的内容
sed "10p" f2 显示f2的第10行 第10行会多显示一行
sed -n "10p" f2 只显示第10行 打印一遍
a \text 在行后面追加文本;支持使用\n实现多行追加
sed "10a\===" f2 到第10行中的结尾打印===
sed "a\===" f2 在所有行的结尾打印===
i \text 在行前面插入文本;支持使用\n实现多行插入
sed "/UUID/i\===" f2 在UUID前面显示=====
c \text 提换行为单行或多行文本
sed "/UUID/c\++++++++" f2 把UUID匹配到的行都替换到+++++++
w /path/to/somefile 保存模式匹配的行至指定文件
sed "/UUID/w f3" f2 把UUID匹配到的行保存到f3 中
r /path/from/somefile 读取指定文件的文本至模式空间中匹配到的行后
sed "/UUID/r/etc/issue" f2 在UUID的后面打印/etc/issue 中的内容
= 为模式空间中的行打印行号
sed "/UUID/=" f2 在UUID 的前面显示所在的行
! 模式空间中匹配行取反处理
sed "/UUID/!=" f2 除了UUID 的行不打印 其他的都打印一遍
s/// 查找替换,支持使用其它分隔符,[email protected]@@,s###
sed "/UUID/s/xfs/chen/" f2 在f2文件中 搜索UUID的行 把xfs替换成chen
替换标记
g 行内全局替换
p 显示替换成功的行
w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中
示列:
sed‘2p’ /etc/passwd 显示/etc/passwd 的第2行 其他的也显示
sed–n ‘2p’ /etc/passwd 只显示/etc/passwd 的第2行 其他不显示
sed–n ‘1,4p’ /etc/passwd 显示/etc/passwd 的1~4行
sed–n ‘/root/p’ /etc/passwd 搜索 root的行其他不显示
sed–n ‘2,/root/p’ /etc/passwd 从第2行 开始搜 root 的行
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
练习
1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符
sed ‘s/^[[:space:]]\+//‘ /etc/grub2.cfg
2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
1. sed "s/^#[[:space:]]\+//" /etc/fstab
3、在/root/install.log每一行行首增加#号
sed ‘s/.*/#&/‘ /etc/passwd
sed ‘s/^/#/‘ /etc/passwd
4、在/etc/fstab文件中不以#开头的行的行首增加#号
sed ‘/^#/!s/.*/#&/‘ f2
5、处理/etc/fstab路径,使用sed命令取出其目录名和基名
echo "/etc/fstab" | sed -r ‘[email protected]^(/?.*)/[^/]+/[email protected]\[email protected]‘
echo "/etc/fstab" | sed -r ‘[email protected]^/?.*/([^/]+/?)@\[email protected]‘
6、利用sed 取出ifconfig命令中本机的IPv4地址
ifconfig | sed -n "2p" | tr -s ‘ ‘ ‘#‘ | cut -d# -f3
sed:高级编辑命令
h: 把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g: 从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x: 把模式空间中的内容与保持空间中的内容进行互换
n: 读取匹配到的行的下一行覆盖至模式空间
N:追加匹配到的行的下一行至模式空间
d: 删除模式空间中的行
D:删除多行模式空间中的所有行
示列:
sed -n ‘n;p‘ FILE
sed ‘1!G;h;$!d‘ FILE
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
本文出自 “linux” 博客,请务必保留此出处http://001230.blog.51cto.com/11559496/1886601
以上是关于文本工具三剑客:sed的主要内容,如果未能解决你的问题,请参考以下文章