概要
1.文本处理器
2.linux之sed
详细
1.文件处理命令
1.sort命令:
用于将文件内容排序
默认以内容第一个字符为排序标准
参数:
-n :依照数值进行排序
sort -n 文件路径
-r :倒序
sort -r 文件路径
-k :以某列进行排序
sort -k数字 文件路径
注:默认每行空格为分隔符,
-t :指定分隔符,默认空格
sort -t'分隔符'
2.uniq命令:
用于检查及删除文本文件中重复的行列,一般与sort结合使用
仅仅去掉上下相邻的重复行,可以用sort排序后去重
参数:
-c :在打印出来的行列中显示该行重复的次数
-d :仅显示重复出现的列
-u :仅显示一次出现的列
3.cut命令:
显示行中的指定部分,删除文件中指定的字段
参数:
-d :指定字段的分隔符,默认为‘tab’
-f :指定显示的列
2222 4
将文本内容以'2'分割,如果分隔符在某列的第一位,则前一位算第一列,即’2‘分割出五列’4’为第五列
4.tr命令:
替换或删除
tr 原内容 新内容
注:一个字符一个字符替换
参数:
-d :删除字符
5.wc命令:
统计,计算数字
参数:
-c :统计文件的Bytes数
-l :统计文件的行数
-w :统计文件中单词的个数,默认空格为分隔符
注:
在linux中,一段连续的数字或者字母组合为一个‘词’
2.sed
grep :过滤文本
sed :修改文本
swk :处理文本
在以上三个中:!表示取反
sed是linux中的流媒体编辑器
1.sed格式:
sed [参数] '处理规则' [操作对象]
2.参数:
-e :允许多项编辑
sed ‘3d’ 路径 (单项编辑)
sed -e '4d' -e '5d' 路径 (多项编辑)
3 :文件内行数
d :编辑模式
-n :取消默认输出
sed -d '4d' -e '5d' -n 路径
不会打印出来
-i :就地编辑
将打印出来的直接写入文件而不会打印出来
-r :支持扩展正则
sed -r '/123/d' 路径
/ /:中写入正则也可写入带正则的文件
将正则写入一个文件内,文件路径可以写入/ /中
-f :指定sed匹配规则脚本文件
创建一个脚本文件,可以被sed调用
3.定位:
1.数字定位法:
指定文本内的行号
sed '3d' 文件路径
3:文件内的第三行
d:编辑模式
sed '2,3d' 文件路径
2,3:第二行到第三行
2.正则定位法::
sed '/g/d' 文件路径
包含g的行删除
sed '/^g/d' 文件路径
g开头的行删掉
3.数字和正则定位法:
指定数字后是正则
sed '数字行号,/^g/d' 文件路径
从数字行匹配到正则匹配到的行
4.正则和正则定位法:
sed '/^g/,/j/d' 文件路径
从以g开头的行删除到包含j的行
4.sed编辑模式:
d :删除(整行删除)
精确删除(行号) :sed -n '3p' 1.txt
删除第三行
指定范围删除(行号) :sed -n '2,5p' 1.txt
删除2到5行
内容删除(grep过滤) :sed -n '/xxx/p' 1.txt
删除xxx行的内容
范围删除(过滤) :sed -n '/xxx/,/ccc/' 1.txt
删除xxx到ccc所有行的内容
混合删除(行号+过滤) :sed -n '2,/xxx/' 1.txt
删除第2行到包含xxx行的内容
p :打印(查找)
精确查找(行号) :sed -n '3p' 1.txt
查找第三行
指定范围查找(行号) :sed -n '2,5p' 1.txt
查找2到5行
内容查找(grep过滤) :sed -n '/xxx/p' 1.txt
查找xxx行的内容
范围查找(过滤) :sed -n '/xxx/,/ccc/' 1.txt
查找xxx到ccc所有行的内容
混合查找(行号+过滤) :sed -n '2,/xxx/' 1.txt
查找第2行到包含xxx行的内容
sed -nr /^$|#/!p' /etc/ssh/sshdconfig
碰到空行或者#号的行不显示
a :在当前行后添加一行或多行
sed '2axxx' 路径
将xxx添加到第二行之后
c :用新的文件修改(替换)当前行
sed '2cxxx' 路径
将第2行替换为xxx
i :在当前行前一行插入文本
sed '2ixxx' 路径
注:i有三种使用方式。
r :在文件中读内容
sed '2r 读的文件路径' 插入文件的路径
即读出来的内容插入到指定行中,并打印出来
w :将指定行写入新的文件
sed '2w 新的文件路径' 原文件路径
获取原文件的第二行内容写入新文件中
y :将原字符转换成新字符
sed '2y/原字符/新字符/' 文件路径
将文件第二行中的某个字符替换为新的字符
s :将字符串转换成新字符串
sed 's/11/22/' 文件路径
将文本内的11整体替换为22(s前有定位)
特性:
每一行只替换一次,如要同一行替换多个,需要加g
g :全部执行
应用于一整行
echo 123_345_4534 |sed -r 's#(^.*)_(.*)_(.*$)#\3@\1@\2#g'
echo 123_345_4534 |sed -r 's#(^[0-9]+)_([0-9]+)_([0-9]+$)#\3@\1@\2#g'
替换并制定位置
sed 's/11/22/g' 路径
将文本内同一行多个需要替换的内容全部替换
注:
g是执行,没有替换功能,需要配合其他编辑模式
i :忽略大小写(需跟其他编辑模式一起使用)
& :代表前面匹配到的内容
sed 's/.*/#&/g'
将前面所有匹配到的内容相当于赋值给&。然后操作
匹配本机ip:
ip addr show eth0
简写
ip a s eth0
ip a s eth0 | sed -n '3p' | sed -r 's#.*t (.*)/24 brd (.*) s.*$#\1\n\2#g'
ip a s eth0 | sed -rn '3s#.*t (.*)/24 brd (.*) s.*$#\1\n\2#gp'
文件尾部追加内容:
1.cat>>文件路径<<'EOF'(如果追加的内容包含特殊符号,即可在EOF左右添加'')
追加内容
内容
EOF(结束追加)
2.sed -i '$a 一一一\n二二二\n三三三' 2.txt
注:推荐1
3.案例
1.将nginx.conf中的注释行全部去掉
sed '/^\ *#/d' /etc/nginx/nginx.conf
2.将nginx.conf中每一行之前增加注释
sed 's/.*/#&/g'
3.要求一件修改本机的ip
192.168.15.100——>192.168.15.101
172.16.1.100——> 172.16.1.101
4,将/etc/passwd中的root修改成root
sed -i 's/root/ROOT/g' /etc/