grep 命令详解
grep [选项] ‘模式’ 文件名
grep [参数] [选项] [操作对象]
grep ‘error’ -c 5 --color info.log
[模式]:是要搜索的字符串或正则表达式。
[选项]:是可选的,用于定制grep的行为。
[操作对象]:是要搜索的文件名或目录名。
常用选项
-i:忽略大小写。
-v:反向匹配,选择不匹配的行。
-r 或 -R:递归搜索,不仅在当前目录的文件中搜索,还在子目录的文件中搜索。
-l:只输出包含匹配行的文件名。
-n:显示匹配行及其行号。
-c:只输出匹配的行数。
-o:只输出匹配的部分。
-A num:显示匹配行之后的num行。
-B num:显示匹配行之前的num行。
-C num 或 --context=num:显示匹配行前后各num行。
-E 使用扩展正则,等价于egrep。
-f 文件:从文件中获取模式。
–color 或 --colour:高亮显示匹配部分。
普通正则表达式
^ :以某字符开头
$ :以某字符结尾
. :匹配除换行符之外的任意单个字符
* :匹配前导字符的零次或者多次
[] :某组字符串的任意一个字符
[^] :取反
[a-z] : 匹配小写字母
[A-Z] :匹配大写字母
[a-z[A-Z]: 匹配字母
[0-9] :匹配数字
\ :转义富符
() :分组
拓展正则表达式
{} :匹配的次数
{n} :匹配n次
{n,} :至少匹配n次
{n,m} :匹配n到m次
{,m} :最多匹配m次
+ :匹配至少一个或多次前导字符
? :匹配一个或者零个前导字符
| :或
正则与grep实战
- 在info.log文件中,匹配含有’error’的行
grep 'error' info.log
- 统计在info.log文件中含有’error’的行数
grep 'error' info.log | wc -l
wc 命令详解
wc(word count)命令是 Linux 和类 Unix 系统中的一个强大工具,用于统计文件中的行数、单词数、字节数和字符数。通过不同的选项,用户可以自定义统计的内容。wc 命令不仅适用于单个文件,还可以处理多个文件,并且可以通过管道从标准输入读取数据。
基本语法
wc [选项] [文件...]
常用选项
- -l 或 --lines:
统计文件的行数。
wc -l filename
- -w 或 --words:
统计文件的单词数。单词是指由空格、制表符或换行符分隔的非零长度字符序列。
wc -w filename
- -c 或 --bytes:
统计文件的字节数。字节数是指文件中所有字符占用的字节数。
wc -c filename
- -m 或 --chars:
统计文件的字符数。字符数是指文件中所有字符的数量,包括多字节字符。
wc -m filename
- -L 或 --max-line-length:
显示文件中最长行的长度。
wc -L filename
- 无选项:
默认情况下,wc 命令会同时显示行数、单词数和字节数。
wc filename
用法示例
统计多个文件的行数:
wc -l file1 file2 file3
统计目录下所有文件的行数:
wc -l *
统计目录下所有 .txt 文件的行数:
wc -l *.txt
统计文件的行数并重定向输出:
wc -l filename > line_count.txt
统计文件的单词数并追加到另一个文件:
wc -w filename >> word_count.txt
统计多个文件的总行数:
wc -l file1 file2 file3 | awk '/total/ {print $1}'
统计文件中包含特定字符串的行数:
grep "keyword" filename | wc -l
统计文件中每行的平均单词数:
wc -w filename | awk '{total_words=$1}' && wc -l filename | awk '{total_lines=$1; print total_words/total_lines}'
统计文件中每个单词出现的次数:
tr ' ' '\n' < filename | sort | uniq -c | sort -nr
统计文件中每个字符出现的次数:
fold -w1 filename | sort | uniq -c | sort -nr
统计文件中每个单词的长度:
tr ' ' '\n' < filename | awk '{print length, $0}' | sort -n
统计文件中每个单词的长度分布:
tr ' ' '\n' < filename | awk '{print length}' | sort | uniq -c
统计文件中每个字符的类型(字母、数字、其他):
fold -w1 filename | awk '{if ($1 ~ /[a-zA-Z]/) print "Letter"; else if ($1 ~ /[0-9]/) print "Number"; else print "Other"}' | sort | uniq -c
实际应用示例
统计代码行数:
统计某个项目中的代码行数,排除空行和注释行。
grep -vE '^\s*$|^#' codefile.c | wc -l
统计日志文件中的错误数量:
统计日志文件中包含 “ERROR” 的行数。
grep "ERROR" logfile.log | wc -l
统计文本文件中的唯一单词数:
统计文本文件中的唯一单词数。
tr ' ' '\n' < textfile.txt | sort | uniq | wc -l
统计多个文件的总字节数:
统计多个文件的总字节数。
wc -c file1 file2 file3 | awk '/total/ {print $1}'
统计目录下所有文件的总单词数:
统计目录下所有文件的总单词数。
wc -w * | awk '/total/ {print $1}'
统计文件中每个单词的频率:
统计文件中每个单词的频率,并按频率降序排列。
tr ' ' '\n' < filename | sort | uniq -c | sort -nr
统计文件中每个字符的频率:
统计文件中每个字符的频率,并按频率降序排列。
fold -w1 filename | sort | uniq -c | sort -nr
统计文件中每个单词的长度分布:
统计文件中每个单词的长度分布,并按长度升序排列。
tr ' ' '\n' < filename | awk '{print length, $0}' | sort -n
统计文件中每个单词的长度分布:
统计文件中每个单词的长度分布,并按长度升序排列。
tr ' ' '\n' < filename | awk '{print length}' | sort | uniq -c
统计文件中每个字符的类型:
统计文件中每个字符的类型(字母、数字、其他),并按类型分类。
fold -w1 filename | awk '{if ($1 ~ /[a-zA-Z]/) print "Letter"; else if ($1 ~ /[0-9]/) print "Number"; else print "Other"}' | sort | uniq -c
注意事项
- 文件大小:对于非常大的文件,wc 命令可能会消耗较多的内存和 CPU 资源。在这种情况下,可以考虑使用流式处理工具(如 awk)来优化性能。
- 权限问题:如果文件没有读取权限,wc 命令会报错。确保你有适当的权限来读取文件。
- 输出重定向:使用 > 重定向输出时,会覆盖目标文件的内容。使用 >> 追加内容时,会在目标文件末尾添加内容。
- 多文件统计:当统计多个文件时,wc 命令会为每个文件单独输出统计结果,并在最后一行显示总计。
总结
wc 命令是一个非常实用的工具,适用于多种文件统计场景。更灵活地使用 wc 命令来统计文件的行数、单词数、字节数和字符数。无论是简单的文件统计还是复杂的文本处理,wc 命令都能提供强大的支持。
管道符
管道符 “ | ” ,左边的输出结构,作为右边的输入。
统计info.log文件中ccf5928453f34df9出现的行数
grep 'ccf5928453f34df9' info.log | wc -l