sed:类似于vim,就是一个文本编辑器,按行进行编辑以及处理。
grep sed awk:文本三剑客,都是针对文件内容的行进行处理。
sed的主要作用就是对文本内容进行增删改查。
sed可以支持正则表达式,支持扩展正则表达式。
sed的原理:读取,执行,显示三个过程。
读取:读取文本内容之后,读取到的内容存放到临时的缓存区,模式空间。
执行:在模式空间,根据读取的文本内容,按行执行,除非指定行号,否则会遍历所有行,依次执行,从上往下执行。
显示:执行完之后,把执行结果打印,如果改变生效,模式空间被修改的内容会写入到指定的文件当中,指示操作,但是不最终写入文件,只展示结果,展示完之后,模式空间的数据会立即删除。
sed的实际操作格式:
sed -e '操作' 文件1 -e '操作' 文件2
只对一个文件的操作,可以不加-e
-e 条件操作选项
-f 指定脚本文件来处理输入的文件内容。把命令卸载脚本里,用脚本里的命令来处理第二个文件里面的内容
-i 立即生效,慎用
-n 显示script处理之后的结果
操作符:
s :替换,替换指定的字符
d :删除,删除指定的行
a :增加,在当前行的下面插入指定内容
i :增加,在当前行的上一行插入
c :替换,替换整行
y :替换,替换字符,替换前后的字符长度必须一致
p :打印 范围打印:,到 ;和
r :表示使用扩展
sed的核心就是改,删,增,查没有grep强大
sed -n ' /o/p' ky30.txt 所有包含o的会全部打印
sed -n '/^root/p' /etc/passwd
sed -n '/$bash/'
sed -r -n '/^root|bash$'
指定行号来进行删除:
sed -n '3d;p' ky30.txt
sed -n '1d;3d;p' ky30.txt
sed替换:
s:替换字符串
sed -n 's/root/test/gp' /etc passwd
以root为开头的,把他开头替换成#,把root为开头的行,注释掉:
sed -n 's/^root/#root/p' /etc/passwd
sed -n '/^root/ s/^/#p' /etc/passwd
字母字符的大小写替换:
sed 's/[a-z]/\u&/g' ky30 (小变大)
sed 's/[A-Z]/\l&/g' ky30 (大变小)
l& :转换成小写的特殊符号,在使用
c:整行替换
sed '/exy/c boge is sexy' ky30.txt
y:单字符替换,前后长度保持一致
sed '/boge/a 123' ky30
sed '/boge/i 123' ky30
sed '/bighouse/r ky31.txt' ky30txt
读取的文件 第二个文件是要操作的文件
面试题:
1,sed文本内容处理器,文件过大怎么办?
split -l
split -b
cat +文件名 | sed 处理————中型文件,大型文件还是先分割的好
2,怎么样不进入文件就能删除文件当中的内容,免交互删除
sed -i 'd' ky30.txt
cat /dev/null > ky30.txt
3,
4,前一个文件的命令对下一个文件操作
5,cat ms.txt | sed -r 's/(.*)-(.*)(\.jar)/\1\2\3/'
grep -E "[0-9]+\." ms.txt
6,查看tail -f messages 去匹配的范围内进行打印
sed -n 'Jul 20 11:30:01/,/Jul 20 12:00:01'
7,把网卡的指定ip地址换掉
sed '/准备更换的内容/c /替换的内容/' /etc/sysconfig/network-scripts/ifcfg-ens33