文本处理命令

136 阅读3分钟

cat

n显示行号包括空行
-b跳过空白行编号
-s将所有的连续的多个空行替换为一个空行(压缩成一个空行)
-A显示隐藏字符

paste

paste 文件1 文件2 横向合并   cat纵向合并
paste -d 文件1 文件2 #指定分隔符

less

less [选项] 文件名
可以使用/ 查找 n向下 N向上查找
Page Up 向上翻页,Page Down 向下翻页
/word   搜索word字符串
空格键   显示手册页的下一屏幕
Enter 键  一次滚动手册页的一行
b 回滚一屏  f 向前一屏

grep

grep [选项]… 查找条件 目标文件 #只过滤文件
-v 排除匹配条件
-i 忽略大小写
-o 只显示匹配条件
-r     递归   快速过滤  不过滤软连接
-R   递归目录,但处理软链接
-w    把字符串看成单词
-n 显示匹配内容的所在文件中行数

-A # after, 后#行 
grep -A3 root /etc/passwd   #匹配到的行后3行业显示出来
-B # before, 前#行
-C # context, 前后各#行

-q 静默模式,不输出任何信息
-c 统计匹配的行数
-f   file 根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件

-m  # 匹配#次后停止
^开头    $结尾    ^$空行

tr

tr [选项]... SET1 [SET2]  #替换
-d  删除  
-s  压缩  
-c 保留字符集1的字符,其他字符包括换行符\n用字符集2替换。
[root@localhost ~]#tr 12345678 abc
#最后一个一直用
123456789
abcccccc9
[root@localhost ~]#tr -s " " 
1     2      3     4
1 2 3 4
[root@localhost ~]#cat 1.txt |tr -c "[a-z]" " "
#用 空格替换除了小写字母之外的所有字符
aaaaa                             bbbbb

[root@yuji ~]# cat 4.txt| tr -s "\n"       //将连续的换行符压缩成一个 过滤空行 
11  22  33  
[root@yuji ~]# cat 4.txt| grep -v "^$"     //过滤出非空行  
11  22  33

[root@yuji ~]# echo $PATH | tr ":" "\n"    //分行输出环境变量PATH中包含的所有目录
/usr/local/sbin  
/usr/local/bin  
/usr/sbin  
/usr/bin  
/root/bin

wc

wc  [选项]...  目标文件..
-l  统计文件行数 -c 字节数 -w单词数

cut

cut [选项]... [文件]...
-d DELIMITER: 指明分隔符,默认tab
-f 想要获取的字段
     #: 第#个字段,例如 3
     #,#[,#]:离散的多个字段,例如 1,3,6
     #-#:连续的多个字段, 例如 1-6
     混合使用:1-3,7
-c   取字符
[root@localhost ~]#ll |tail -n +2 |tr -s " "| cut -d" " -f3,9
#将空行压缩成一个后 再空格为分隔符  取 第3 和第9列
[root@node01 ~]# head -2 test02.data|cut -c 5
截取出test02.data文件中前2行的第5个字符

sort

sort [选项]... [文件]...
不加任何选项,则默认按首字母排序
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-h 人类可读排序,如: 2K 1G 
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique),去重并排序
-t 指定分隔符
-k 指定列

uniq

uniq [选项]... [文件]..
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
uniq只去重连续行 全行去重需要uniq和sort 命令一起配合使用

#面试题 取两个文件一样或不一样的字段
[root@localhost ~]#cat f1.txt f2.txt 
a
b
c
1
a
2
b
3
c

[root@localhost ~]#cat f1.txt f2.txt |uniq -d
#直接使用 看不出来
[root@localhost ~]#cat f1.txt f2.txt |sort |uniq -u
#一样的
1
2
3
[root@localhost ~]#cat f1.txt f2.txt |sort |uniq -d
#不一样的
a
b
c