Linux文本处理三剑客之sed
2018-03-08 15:17
417 查看
sed介绍
一种在线编辑器,它一次处理一行内容。处理时,把当 前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)(为什么叫模式空间呢:因为 sed(不是所有的行都处理)可以指定仅仅处理哪些行,所以 sed 可以grep 一样做模式过滤的 符合模式条件的处理 不符合条件的不予处理 ),接着用sed 编辑命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。符合模式(模式空间中的模式 每次读取一行 匹配模式 编辑命令)做编辑(到底是删除还是现实还是什么取决于 sed的编辑命令)
Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
sed正则表达式
-i: 表示写入到文件中
P(Print):打印出来
sed -n '/\:/p' file ###显示有冒号的一行 sed -n '/^a/p' file ###以a开头 n:(取消默认输出) sed -n '/a$/p' file ###a结尾 sed -n '3,5p' file ###显示3-5行 sed -n '3,5!p' file ###除了3-5行都显示
D(Delete):删除
sed '/^#/d' file ###删除以#开头的行 sed '1,4d' file ###删除1-4行 sed '/^a/!d' file ###不删除以a开头的行 sed '/^$/d' file ###删除空行cat -E file可以看到每行都是以$结尾
A(Append):附加
sed '/^abc/a hello ' file ###在file中^abc开头的下面一行加入hello \n:回车
C(Replace):重置
sed '/^a/c dream' file ###以a开头的行改成dream
W(Write):写
sed '/^a/w /mnt/file1' file ###把file中以a开头的内容写入file1文件中 sed '6r /mnt/file1' file ###把file1内容写入到file的第6行
通过脚本改变Apache端口
vim chage_http.sh #!/bin/bash PORT=`grep ^Listen /etc/httpd/conf/httpd.conf` sed "/^Listen/c Listen $1" -i /etc/httpd/conf/httpd.conf systemctl restart httpd
sed的其他用法:s:(动作) g:(全局变量)
把a换成b,n换成m(3种方法):
1. sed -e 's/a/b/g' -e 's/n/m/g' file 2. sed -e 's/a/b/g;s/n/m/g' file 3. vim rule s/a/b/g s/n/m/g sed -f rule file
sed 's/#//g' file ###将所有的#替换成空 sed 's/\///g' file ###将/替换成空 sed '2s/:/##/g' file ###将第二行的:替换成## sed '2,4s/:/##/g' file ###将2-4行的:替换成## sed '/a/,/b/s/:/##/g' file ###从a到b,中间的:替换成## sed 's/:/##/' file ###将每一行的首个:替换成## sed 's/:/##/g' file ##将所有的:替换成## sed 'G' file ##每一行后添加空行 sed '$!G' file ##除了最后一行 每一行添加空行 sed '=' file | sed 'N;s/\n//' ##将行号和内容放在一起 sed -n '$p' file ##显示最后一行
获取IP
ifconfig eth0|sed -n '2s/^.*inet //gp'|sed -n 's/ netmask.*$//gp' ###把第二行以任意到inet 的替换为空,把 netmask到后面的替换为空
sed后向引用
当在前面匹配部分用小括号时.第一个括号内容可以在后面用\n(n=1,a8de
第一个括号的内容)输出对应的内容
sed -n 's#()()#\1\2#gp' file ifconfig eth0|sed -rn '/inet\>/s#^.*inet (.*)netmask.*$#\1#gp' ###取出IP,-r:转义 sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd ###以:为分隔符,换取第一行和最后一行的位置,[^:]+:匹配多个非冒号的字符
批量修改文件夹名
mkdir file{1..10}.dream ls *.dream|sed -r 's#(^.*).dream#mv & \1.jpg#g'|bash ###&代表前面的内容,\1代表着()的内容,通过bash进行修改
相关文章推荐
- linux文本处理三剑客之sed
- linux文本处理三剑客(二):sed命令详解
- Linux文本处理三剑客之grep和sed
- Linux 基础命令(八)—— 文本处理三剑客之sed
- Linux文本处理“三剑客”之sed
- Linux 基础命令(八)—— 文本处理三剑客之sed
- Linux上文本处理三剑客之sed用法详解
- Linux文本处理三剑客之sed
- 漫漫运维路——Linux文本处理三剑客之sed
- Linux文本处理三剑客之sed命令
- Linux文本处理三剑客之sed
- Linux文本处理三剑客之sed
- Linux文本处理三剑客之sed
- Linux文本处理三剑客之sed
- linux文本处理三剑客——sed
- 8.9_Linux文本处理三剑客之sed和文本编辑利器vim的使用
- Linux基础(11)文本处理三剑客之sed
- Linux上文本处理三剑客之sed
- Linux文本处理三剑客之sed
- Linux文本处理“三剑客”之sed