加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux_sed操作

发布时间:2020-12-14 02:01:34 所属栏目:Linux 来源:网络整理
导读:? ? sed 处理流程 ? sed ‘p‘ passwd打印两行一模一样的(因为默认已经输出到屏幕上一次,在p一下就两次了),sed -n ‘p‘ passwd就可以正常显示一行,-n忽略默认输出,把默认的输出忽略了 nl passwd就会把行号显示出来 ? 定位一行的方式: 1 、行号 nl pass

?

?

sed处理流程

?

sed ‘p‘ passwd打印两行一模一样的(因为默认已经输出到屏幕上一次,在p一下就两次了),sed -n ‘p‘ passwd就可以正常显示一行,-n忽略默认输出,把默认的输出忽略了

nl passwd就会把行号显示出来

?

定位一行的方式:

1、行号

nl passwd | sed -n ‘22p‘就会把第22行的行号和内容输出来,nl -b a passwd,nl -b a的意思把空白行的行号也显示出来

?

2、正则表达式

sed -n ‘/mysql/p‘ passwd,利用正则表达式把mysql这行打印出来

?

定位多行的方式:

1、行号

?nl passwd | sed -n ‘1,5p‘显示1-5行,多行显示

?

2、正则表达式

?可以用正则表达式nl passwd | sed -n ‘/mysql/,/ssj/p‘定位多行,也可以用行号和正则同时来定位(nl passwd | sed -n ‘1,/adm/p‘)

?

不选择这一行或几行:

nl passwd | sed -n ‘10!p‘ 不要第10行

nl passwd | sed -n ‘6,10!p‘?不要第6-10行

?

间隔几行:

nl passwd | sed -n ‘6~2p‘ 从第6行开始,步长是2,中间是~线,打印出第6,8,10......

?

基本操作命令:

-a:新增行?nl passwd | sed ?‘12a=====‘,在第12行后面插入5个=,nl passwd | sed ?‘1,5a=====‘,在1-5行后面插入5个=

i:插入行?nl passwd | sed ?‘12i=====‘,在第12行前面插入5个=,nl passwd | sed ?‘1,5i=====‘,在1-5行前面插入5个=

-c:替代行?nl passwd | sed ?‘12c=====‘,把第12行换成5个=,nl passwd | sed ?‘7,12c=====‘,把7-12行变成1行,5个=

-d:删除行?nl passwd | sed ?‘12d‘,删除第12行,nl passwd | sed ?‘7,12d‘,把7-12行都删除

?

修改配置文件,在profile中添加环境变量:

sed -i ‘$a? export TOMCAT_HOME=XXXXn ? ?export PATH=$PATH:$TOMCAT_HOME‘ profile ? ? ?$代表最后一行,a是最后一行后面新增,代表输入空格,n换行,-i是修改文件内容,直接在profile里面就追加成功了

?

删除空行:

sed ‘/^$/d‘ AAA.txt ?^代表行的开始,$代表行的结束,^$代表空白行

?

服务器日志处理,服务器log中打印error信息:

sed -n ‘/error/p‘ AAA.txt

?

替换操作:s

分隔符: /

全局替换: g ?sed ‘s/:/*/g‘ passwd 把passwd文件里的所有:都换成*,如果没有写g,只把第一个:替换成*

?

多个sed命令用;隔开?nl passwd | sed ‘{10,20d;s/:/*/g}‘ 删除掉10-20行且将:全部换成*

?

nl passwd | sed -n ‘{n;p;}‘ 大括号里的n是跳过这一行直接处理下一行打印,打印就是2,4,6,8...... ?nl passwd | sed -n ‘{n;n;p;}‘ 打印3,9......,也可以用步长的方式打印3,9行?nl passwd | sed -n ‘{3~3p}‘

?

&:替换固定的字符串,配合替换操作使用,将passwd中用户名后添加空格?sed ‘s/[a-z_-]+/& /‘ passwd,先把用户名筛选出来,用户名这么表示[a-z_-],正则a-z随机取一个,passwd里多个用户名,使用+,将+转义用+,&就是代表[a-z_-],匹配用户名

?

将用户名的首字母转换为大写 u l ,ls | sed ‘s/.*/u&/‘,对一串字符转大写或小写 U L,?ls | sed ‘s/.*/U&/‘,&就是代表.*,.代表除了换行符以外的所有字符

?

() (),括号要转义,替换某部分字符串,cat test.txt | sed ‘s/w1(w2)(w3)/12/‘ ,1代表第一个正则表达式括弧里面的字符,2第二个正则表达式括弧里面的字符

获取eth0的IP,有两种方式,一是ifconfig | sed -n ‘/inet .*Bca/p‘ | sed ‘s/ine.*r:([0-9.]+).+Bcast.*$/1/‘,[0-9.]代表ip的正则表达式,.要转义用.,一个ip以上+.+中间有一个以上任意字符,.*$,Bcast后面任意字符

二是ifconfig | sed -n ‘/inet .*Bca/p‘ | sed ‘s/ine.*r:([0-9.]+).*Bcast:([0-9.]+).*Mask:([0-9.]+)/1/‘,ifconfig | sed -n ‘/inet .*Bca/p‘ | sed ‘s/ine.*r:([0-9.]+).*Bcast:([0-9.]+).*Mask:([0-9.]+)/1,2,3/‘可以把三个ip都取出来

?

获取passwd中的用户名,uid,gid, sed ‘s/(^[a-z_-]+):x:([0-9]+):([0-9]+):.*$/1,3/‘ passwd

?

r:读取指定文件插入到匹配行,sed ‘1r a.txt‘ b.txt,读取a.txt文件的内容,插入到b.txt文件的第一行,读文件不会改变文件内容,a.txt和b.txt文件内容不会改变

w:复制匹配行拷贝指定文件里,sed ‘1w a.txt‘ b.txt,拷贝b.txt文件的第一行,写到a.txt文件里,覆盖写,a.txt变成了aaa,写操作会改变目标文件

q:退出sed,使用q可以提前退出sed??nl passwd | sed ‘5q‘,打印到第5行就退出sed了

?

-e:可以执行多次sed命令,nl passwd | sed -e ‘10,20d‘ -e ‘s/:/*/g‘,删除10-20行并且将:全部替换成*

?

-i:可以修改文件的内容

?

?

?

?

修改当前目录下所有文件中包含aaa的文件,将aaa改成AAA

?

grep aaa -rl .这个命令就可以将当前目录下所有文件中包含aaa的文件给查找出来,通过?sed -i "s/aaa/AAA/g" `grep aaa -rl .` 即可实现

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读