linux sed命令替换字符串 这是很多新手朋友遇到的问题, 为了解决这个问题,白眉大叔写了本篇文章,linuxsed命令详解。
昨天我们了解了 linux正则表达式语法从0到1实战-白眉大叔 感兴趣的朋友可以了解一下。
废话不多说了, 我们先来说一下 sed
sed 's###g' s: sub, g: global
1首先linux 中sed 的作用:
linux 中sed 可以查找文件的内容, 还有可以直接安行 查找 , 追加内容到文件, 还有替换文件的内容。
还有一个作用就是: 进行格式化输出(反向引用) 这个可以简单的理解为: 把输出来的内容 再追加一些内容。
2. linux sed 语法格式
sed '模式 动作 file
3 linux sed 功能
准备文件:
cat /etc/passwd |head >>1.txt
(1). linux sed 按照行 进行查找
案例: 只显示文件中的第3行
[root@baimeidashu ~]#sed -n '3p' 1.txt
这里要说一下, sed -n 是取消默认输出,p 的意思就是打印, 这是固定写法, 可以记住:有p 就有n ,
案例: 输出文件的最后一行
[root@baimeidashu ~]#sed -n '$p' 1.txt
案例: 查找文件的第3-5行
sed -n '3,5p' 1.txt
案例: 显示5到最后一行
sed -n '5,$p' 1.txt
(2) linux sed 模糊过滤
sed -n '/ 内容/p' file
案例: 查找包含 root 的行
[root@baimeidashu ~]#sed -n '/root/p' 1.txt
案例:查找包含 root shutdown 的行
sed -rn '/root|shutdown/p' 1.txt
这里要说一下, sed -r 是为了 使用 扩展正则。
我们再来分析 一下 正则:
这里我们用到 | 所以 我们需要 加一个参数 sed -r
案例: 过滤root 和shudown 之间的所有行
注意: 过滤 区间范围时:
如果有2个结尾,则匹配到最后的结果
如果有1个开头 1个结尾 正常输出,继续往下匹配到开头没有结尾则输出所有
比如上边的案例, 第一次 过滤的 root , shutdown之间, 第2次就只找到了root 没有找到 shutdown .然后就输出后边的所有了。
(3)linux sed 替换
作用: 替换单词,替换特殊字符,替换数字,删除单词。
语法结构: sed ' s# # #g' file
比如: 我想替换 文件中的root 为 baimeidashu
准备文件:
cat /etc/passwd |head >>1.txt
sed 's#root#baimeidashu#g' 1.txt
这样我们就把 文件 1中 所有的root 替换成了 baimeidashu 了。
这里要注意边界问题,
sed 's#root#baimeidashu#g' 1.txt
为了解决这个问题:
我们可以这样:加一个边界符
\b
sed -r 's#\bbin#baimei#g' 1.txt
这里在bin 前 加了一个\b 就可以了
(4) linux sed删除
sed '2' 1.txt 删除第3行
sed '3,5d' 1.txt 删除3-5行
sed '/内容/d‘ 1.txt 删除过滤到内容的行
(5) sed 后向引用
作用: 格式化输出 ,将行的内容通过正则方式匹配到,然后增加其他字符
格式:sed 's#(匹配的内容)(内容2)(内容3)#\1\2\3#g'
echo test|sed -r 's#(test)#\1#g'
echo test|sed -r 's#(test)#a\1b#g'
输出网卡第2行
ifconfig eth0|sed -n 2p
后向引用取出IP地址:
ifconfig eth0|sed -n '2p'|sed -r 's#^.*inet (.*) netmask.*$#\1#g'
(6) linux sed 增加内容
sed '3c 内容’file
替换第3行整行内容
场景: 修改配置文件,不想用vim 方式, 不用交互式,直接在shell 脚本里实现
sed -i '7c SELINU=enforcing' /etc/selinux/config
linux sed 命令详解 -i
这里要说一下 sed -i 的作用了,
sed -i 修改源文件 不加 -i 输出到屏幕
sed -i '1s#root#baimei#g' 1.txt
把第1行中 的root 修改为 baimei , 然后不在屏幕输出
小结:
linux sed 命令详解 -i
linux sed 命令详解-f
欢迎来撩 : 汇总all