您的位置 首页 linux常用命令

linuxsed命令(linux sed 命令详解 -i )新手入门

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

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章