文本查看

命令汇总

0x00 cat

cat命令会读取文本所有内容输出到标准输出上

$cat -E 1.txt            # 输出文本内容时,显示行结束符$
$cat --show-ends 1.txt   # 效果同上
$cat -v 1.txt            # 显示非打印符
$cat -e 1.txt            # 效果等同于-vE
$cat -n 1.txt            # 显示每行按顺序编号
$cat -s 1.txt            # 将多个连续的空白行合并显示一个空白行

0x01 tac

tac的功能和cat相似,只不过是按行逆序显示文件

$tac            # 当没有指定文件时,从标准输入读取内容,按两次ctrl+d提交内容
$tac 1.txt      # 逆序显示指定文件内容

0x02 head

head命令会读取文件的首部内容输出到标准输出上

$head 1.txt        # 显示1.txt的前10行
$head -n 20 1.txt  # 显示1.txt的前20行
$head -c 30 1.txt  # 显示1.txt的前30个字节

0x03 tail

tail命令会读取文件的尾部内容输出到标准输出上

$tail 1.txt         # 显示1.txt的尾部10行
$tail -n 20 1.txt   # 显示1.txt的尾部20行
$tail -c 100 1.txt  # 显示1.txt的尾部100个字节
$tail -f 1.txt      # 当文件内容增加时,同步输出到标准输出上;常用来监控日志

0x04 more

more命令支持读取文件的全部内容,然后分屏显示;但是该命令只支持向后翻屏,当翻到文件尾部时不支持向前翻

$more 1.txt      # 分屏显示1.txt文件内容
$more +10 1.txt  # 从文件的第10行开始分屏显示

使用more命令分屏查看时可以用到的快捷键有:

  • h?:查看可以使用的快捷键
  • q:退出more文档
  • space:向后翻一屏
  • enter:向后翻一行
  • v:用vim打开当前文件
  • =:打印当前行数
  • :f:打印当前文件名和行数
  • .:重新执行上次快捷键

0x05 less

less命令类似于more命令,读取文件全部内容,然后分屏显示;不同的是,less命令支持前后翻屏。我们通常查看命令帮助使用的man文档就是使用less命令打开的

$less 1.txt        # 分屏显示1.txt内容

使用less命令分屏查看时可以用到的快捷键有:

  • hH:查看可以使用的快捷键
  • q:q:退出less文档
  • enter:向后翻一行
  • y:向前翻一行
  • space:向后翻一屏
  • b:向前翻一屏
  • d: 向后翻半屏
  • u:向前翻半屏
  • /pattern:向后模式匹配
  • ?pattern:向前模式匹配
  • &pattern:只显示被模式匹配到的行
  • n:向模式匹配的方向查看匹配内容
  • N:向模式匹配相反的方向查看匹配内容
  • g:跳转到文件首行
  • G:跳转到文件末行

0x06 wc

wc的全称为word count,该命令用来做字符数统计的

$wc               # 等待标准输入内容,按两次ctrl+d提交,显示行数,单词书和字节数
$wc -l 1.txt      # 统计行数
$wc -w 1.txt      # 统计单词数
$wc -c 1.txt      # 统计字符数

0x07 tr

tr命令是用来转换或删除字符;但是该命令不能接受文件作为参数,只能接受字符作为参数,所以必须使用命令管道进行参数传递,因为管道传递过来的是字符流。其语法格式:tr [options] SET1 [SET2]

  • options常用选项

    • 不使用任何选项且SET1和SET2都存在则表示将SET1的内容转换成SET2中对应的内容;转换规则是:SET1中第n个字符转换成SET2中对应的第n个字符,如果SET2的长度小于SET1,则重复SET2中的最后一个字符来补足其长度
    • -d:删除SET1匹配到的内容,此时没有SET2
    • -s:压缩SET1匹配到的内容,此时没有SET2
  • SET1/SET2都是字符串,它们支持的形式有

    • \\
    • \b:删除符
    • \n:换行符
    • \r:回车符
    • \t:制表符
    • \v:垂直制表符
    • CHAR1-CHAR2:例如0-9就是从0到9
    • [:alnum:]:所有字母和数字
    • [:alpha:]:所有字母
    • [:blank:]:所有水平留白
    • [:cntrl:]:ctrl字符
    • [:digit:]:所有数字
    • [:graph:]:所有可打印字符,不包括空格
    • [:lower:]:所有小写字母
    • [:print:]:所有可打印字符,包括空格
    • [:punct:]:所有标点符号
    • [:space:]:所有垂直留白和水平留白
    • [:upper:]:所有大写字母
    • [:xdigit:]:所有十六进制数
# 字符转换
$echo 12345 | tr '0-9' '9876543210'        # 将12345转换成87654,输出到标准输出上
$cat 1.txt | tr '\t' ' '                   # 将1.txt文件中的制表符转换成空格,输出到标准输出上
$cat /etc/issue | tr 'a-z' 'A-Z'           # 将/etc/issue中的所有小写字母转换成对应的大写字母,输出到标准输出上

# 字符删除
$cat 1.txt | tr -d '0-9'                   # 删除1.txt文件中所有数字,输出到标准输出上

# 字符压缩
$cat 1.txt | tr -s 'a'                     # 将1.txt文件中的连续a(例如:aaaaa)压缩成一个a,输出到标准输出上

0x08 sort

sort命令将会对文件行内容进行排序,然后输出到标准输出上

常用的选项有:

  • -f:排序时忽略大小写
  • -b:排序时忽略前导空白符
  • -n:按照指定数字段的大小对文本文件进行行升序排序
  • -t:后面紧跟字符,指定行分隔符
  • -k:后面紧跟数字,指定分隔后进行比较字段
  • -u:重复的行,只显示一行
  • -d:按字典序进行排序
  • -r: 逆序排序
$sort /etc/passwd             # 默认通过比较行首字符在ASCII表中的次序对文本文件进行行升序排序
$sort -n -t: -k3 /etc/passwd  # 以:作为分隔符分隔每行内容,按照第3段(数字段)的大小进行升序排序
$sort -rbd 1.txt               # 忽略像空格之类的前导空白字符,按照字典进行降序排序

0x09 uniq

uniq命令用来移除重复的行(只有连续的相同行才是重复行,不连续的相同行不是重复行),所以通常和sort命令配合使用,因为只有排序后才能保证相同的行是连续的

$sort 1.txt | uniq             # 消除重复的行
$sort 1.txt | uniq -s 10 -w 10 # 消除重复的行,从第10(-s)个字符开始往后比较10(-w)个字符,如果相同则为重复的行
$sort 1.txt | uniq -c          # 统计每一行出现的次数
$sort 1.txt | uniq -d          # 仅显示出现次数至少两次的行
$sort 1.txt | uniq -u          # 仅显示不重复的行