文本处理命令
sort命令
sort是排序的命令,默认使用第一个字符进行排序
-n # 依照数值的大小排序
[root@localhost ~]# cat 4.txt | sort -n
-r # 以相反的顺序来排序
[root@localhost ~]# cat 4.txt | sort -n -r
-k # 以某列进行排序(默认的分隔符是空格)
[root@localhost ~]# cat 4.txt | sort -n -k2
-t # 指定分割符,默认是以空格为分隔符
[root@localhost ~]# cat 4.txt | sort -n -k2 -t:
uniq 命令
(去重,默认只去重相邻的数据)
一般与 sort 命令结合使用
[root@localhost ~]# cat 3.txt | sort -n | uniq
-c # 在每列旁边显示该行重复出现的次数。
[root@localhost ~]# cat 3.txt | sort -n | uniq -c
-d # 仅显示重复出现的行列。
[root@localhost ~]# cat 3.txt | sort -n | uniq -c -d
-u # 仅显示出一次的行列。
[root@localhost ~]# cat 3.txt | sort -n | uniq -c -u
cut 命令(分割字符)
cut命令用来显示行中的指定部分,删除文件中指定字段。
-d # 指定字段的分隔符,默认的字段分隔符为"TAB";
[root@localhost ~]# cut -d: -f1 2.txt
-f # 显示指定字段的内容
[root@localhost ~]# cut -d: -f2 /etc/passwd
tr命令(替换字符)
[root@localhost ~]# cat 4.txt | tr "123" "abc"
-d # 删除字符
[root@localhost ~]# cat 4.txt | tr -d "456"
-c # 统计文件的Bytes数
[root@localhost ~]# cat 2.txt | wc -c
-l # 统计文件的行数
[root@localhost ~]# cat 2.txt | wc -l
-w # 统计文件中单词的个数,默认以空白字符做为分隔符
[root@localhost ~]# cat 2.txt | wc -w
**注**: 在Linux系统中,一般连续的数字或字母组合为一个词。
sed 命令
sed (流媒体编辑器): sed 主要用来修改文件
格式
sed [参数] "[定位][指令]" 处理的文本路径
注 : 不指定定位, 则默认处理全文
命令版本信息:
sed --version
参数
-e : 允许多项编辑
-n : 取消默认输出
-i : 就地编辑文本
-r : 支持扩展正则表达式(sed中的正则表达式必须放在两个//中间)
-f : 指定定位规则的文件
练习
1. 要求将/etc/passwd文件复制到/root/1.txt中,然后删除当中包含/sbin/nologin的行
cat /etc/passed > 4.txt
sed -i -r "/\/sbin\/nologin/d" 4.txt
cat 4.txt
2. 将/etc/nginx/nginx.conf文件中所有注释的行(以#开头的行)全部删除
sed -i -r "/^ *#/d" /etc/nginx/nginx.conf
sed + 正则表达式(定位)
1、 数字
固定定位
sed -n '2p' 2.txt
范围定位
sed -n '1,3p' 2.txt
2、 正则
正则表达式必须放在//之间
案例
1. 打印/etc/passwd文件中包含root的行
sed -n "/root/p" /etc/passwd
2. 将包含空格的行打印出来
sed -n -r "/ +/p" /etc/passwd
3、 数字加正则
正则匹配是非贪婪性的匹配
贪婪性是匹配到之后,不停继续匹配,直至文件所有的内容全部匹配完毕
非贪婪性匹配,一旦匹配到就停止匹配
案例
1. 在/etc/passwd文件中的第一行,到包含
test的行,全部删除
sed -r "1,/test/d" /etc/passwd
2. 删除从包含root的行到第3行的内容
sed -r "/root/,3d" /etc/passwd
3. 从包含root的行删除到包含ftp的行
sed -r "root/,/ftp/d" /etc/passwd
4、 \c 与 c 分隔符
\c 与 c 只是一个代表,其中c可以替换成任意一个字符
```
sed -i -r "\#/sbin/nologin#d" 4.txt
sed -i -r "\A/sbin/nologinAd" 4.txt
```
常用指令
p : 打印文本 (与-n一起使用)
d : 删除文本
a : 在当前行后添加一行或多行内容
c : 用新文本修改(替换)当前行中的文本
i : 在当前行之前插入文本 (删除文件sed -i.bak; -i参数必须写在所有参数最后面)
r : 从以外文件中读相关内容,写到相关行之后
w : 匹配到的行写入一个新的文件之中
y : 将字符替换成一个新的字符 (替换文本中相同的字符)
s : 用一个字符整体替换成另外一个字符
(一行只能替换最前面的字符)
s 指令替换对于行来说,是非贪婪性,如果需要全局替换则需使用g 指令
g : 全局执行
i : 与 s 指令配合一起使用时,则是忽略大小写的作用
案例
1. 在文本中,打印第一行和第五行
sed -e '5p' -e "1p" 1.txt
2. 在文本中,要求只打印第1,5,6三行
sed -n -e '5p' -e "1p" -e "6p" 1.txt
3. 要求删除文件的第3行
sed -i '3d' 1.txt
4. 删除/etc/fstab文件中所有注释的行
sed -i -r "/^ *#|^$/d" /etc/fstab
5. 删除1.txt的3行,打印第4行
sed -f 3.txt 1.txt
查看
cat 3.txt
案例:
a : 在当前行后添加一行或多行
sed "2a xxxx" 4.txt
c : 用新文本修改替换当前行中的文本
sed "3c fkahfkd" 4.txt
i : 在当前行之前插入文本
sed "3i hdajagd" 4.txt
练习:在/etc/passwd 文件中,1至3行之前插入HelloWorld
sed "1,3i HelloWorld" /etc/passwd
r : 从以外文件中读相关内容,写到相关行之后
sed "1,3r 5.txt" /etc/passwd
w : 匹配到的行写入一个新的文件中
sed "1,5w 6.txt" /etc/passwd
y : 将字符替换成一个新的字符(替换文本中相同的字符)
sed "1,5y/sbin/1234/" /etc/passwd
sbin ---> 1234
s ---> 1
b ---> 2
i ---> 3
n ---> 4
s : 用一个字符整体替换成另外一个字符
sed "s/sbin/1234/" /etc/passwd
g : 全局执行
sed "s/root/1234/g" /etc/passwd
i : 与s 指令配合使用,忽略大小写
sed "s/ROOT/1234/i" /etc/passwd
案例
练习
1、将nginx.conf中的注释行全部去掉
[root@localhost ~]# sed '/^ *#/d' /etc/nginx/nginx.conf
2、将nginx.conf中每一行之前增加注释
[root@localhost ~]# sed 's/.*/# &/g' /etc/nginx/nginx.conf
3、要求一键修改本机的ip,
192.168.15.100 ---> 192.168.15.101
172.16.1.100 ---> 172.16.1.101
sed -i 's#.100#.101#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
4、将/etc/passwd中的root修改成ROOT
sed -i 's#root#ROOT#g' /etc/passwd