1. head/tail命令
# 打印文本的前10行
head test_case11-1.log
# 从stdin读取数据
cat test_case11-1.log | head
# 指定打印前n行
head -n 5 test_case11-1.log
# 打印除了最后100行之外的所有的行(-100表示的是负数,并非选项)
head -n -100 test_case11-dut3.log
# 打印文件的最后10行
tail test_case11-dut3.log
# 从stdin读取数据
cat test_case11-1.log | tail
# 打印最后n行
tail -n 5 test_case11-1.log
# 打印除前100行(使用 +(100+1))之外的所有的行
tail -n +101 test_case11-dut3.log | wc -l
tail命令的一个常见用法是监视一个内容不断增加的文件(例如系统日志文件)中出现的新行。因为新增加的行都是出现在文件的尾部,可以在其被写入的时候,使用tail将这些行显示出来。为了能够监视文件的增长,tail有一个特殊的选项-f或–follow,允许tail关注文件内容的更新并将其显示出来:
tail -f /flash/swlog_chassis1
2. wc命令
wc是一个用于统计行、单词和字符数量的实用工具。
> wc --help
Usage: wc [OPTION]... [FILE]...
or: wc [OPTION]... --files0-from=F
Print newline, word, and byte counts for each FILE, and a total line if
more than one FILE is specified. A word is a non-zero-length sequence of
characters delimited by white space.
With no FILE, or when FILE is -, read standard input.
The options below may be used to select which counts are printed, always in
the following order: newline, word, character, byte, maximum line length.
-c, --bytes print the byte counts
-m, --chars print the character counts
-l, --lines print the newline counts
--files0-from=F read input from the files specified by
NUL-terminated names in file F;
If F is - then read names from standard input
-L, --max-line-length print the maximum display width
-w, --words print the word counts
--help display this help and exit
--version output version information and exit
# 统计行数
wc -l test_case11-1.log
# 将stdin作为输入
cat test_case11-1.log | wc -l
# 统计单词数
wc -w test_case11-1.log
cat test_case11-1.log | wc -w
# 统计字符数
wc -c test_case11-1.log
cat test_case11-1.log | wc -c
echo 1234 | wc -c
# output: 5
echo -n 1234 | wc -c #-n代表不输出尾随换行符
# output: 4
# 打印文件中最长一行的长度
wc -L test_case11-1.log
# output: 70
3. 正则表达式
正则表达式规则:
-
位置标记
正则表达式 描 述 示 例 ^ 指定了匹配正则表达式的文本必须起始于字符串的首部 ^tux 能够匹配以tux起始的行 $ 指定了匹配正则表达式的文本必须结束于目标字符串的尾部 tux$能够匹配以tux结尾的行 -
标识符
正则表达式 描 述 示 例 A字符 正则表达式必须匹配该字符 A能够匹配字符A . 匹配任意一个字符 Hack.能够匹配Hackl和Hacki,但是不能匹配Hackl2或Hackil,它只能匹配单个字符 [] 匹配中括号内的任意一个字符。中括号内可以是一个字符组或字符范围 coo[kl]能够匹配cook或cool,[0-9]匹配任意单个数字 [^] 匹配不在中括号内的任意一个字符。中括号内可以是一个字符组或字符范围 9[01]能够匹配92和93,但是不匹配91和90;A[0-9] -
数量修饰符
一个标识符可以出现一次、多次或是不出现。数量修饰符定义了模式可以出现的次数。
正则表达式 描 述 示 例 ? 匹配之前的项1次或0次 colou?r能够匹配color或colour,但是不能匹配colouur + 匹配之前的项1次或多次 Rollno-9+能够匹配Rollno-99和Rollno-9,但是不能匹配Rollno- * 匹配之前的项0次或多次 co*l能够匹配cl、col和coool {n} 匹配之前的项n次 [0-9]{3}能够匹配任意的三位数,[0-9]{3}可以扩展为[0-9] [0-9] [0-9] {n,} 之前的项至少需要匹配n次 [0-9]{2,} 能够匹配任意一个两位或更多位的数字 {n,m} 之前的项所必须匹配的最小次数和最大次数 [0-9]{2,5}能够匹配两位数到五位数之间的任意一个数字 -
其他特殊字符
正则表达式 描 述 示 例 () 将括号中的内容视为一个整体 ma(tri)?x 能够匹配max或matrix | 指定了一种选择结构,可以匹配 |两边的任意一项 Oct (1st | 2nd)能够匹配Oct 1st或Oct 2nd \ 转义字符可以转义之前介绍的特殊字符 a\.b能够匹配a.b,但不能匹配ajb。因为\忽略了.的特殊意义
示例:
cat 1.txt
# output :
vlan port type status
--------+------------+------------+--------------
1 1/1/1 default forwarding
1 1/1/2 default inactive
1 1/1/3 default inactive
1 1/1/4 default inactive
1 1/1/5 default inactive
cat 1.txt | egrep -w '^[^0-9]+$|1/1/13|0/25'
# output :
vlan port type status
--------+------------+------------+--------------
1 1/1/13 default inactive
egrep等价于grep -E;代表扩展的表达式
-w:match only whole words;代表精确匹配
^:位置标记;指定了匹配正则表达式的文本必须起始于字符串的首部
[^0-9]:标识符;代表不匹配0-9中的任何一个字符
+:数量修饰符;匹配之前的项1次或多次
$: 指定了匹配正则表达式的文本必须结束于目标字符串的尾部;代表整行至结尾不匹配0-9中的任何一个字符
正则表达式可视化网页:http://www.regexper.com;或者在网页上搜索其他正则表达式可视化工具。