linux如何实现,对某个文本循环查找多个字符串,并输出所在行的内容?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux如何实现,对某个文本循环查找多个字符串,并输出所在行的内容?相关的知识,希望对你有一定的参考价值。
假设有一个search.txt 文本文件:里面有5个单词
word
list
hello
good
bad
另外一个文本文件all.log
如何实现:从all.log 选出含有word、list、hello、good、bad所在的行文本。
例如,要查找在文件 all.log 中含有单词 word 的行,您可以使用以下命令:
grep word all.log
如果要查找多个单词,您可以将它们放在一个字符串中,然后将该字符串作为 grep 命令的参数。例如,要查找在文件 all.log 中含有单词 word、list、hello、good 或 bad 的行,您可以使用以下命令:
grep "word|list|hello|good|bad" all.log
请注意,单词之间使用 | 符号隔开,表示“或”的意思。
此外,您还可以使用 -f 选项来指定要查找的单词列表所在的文件,这样就可以避免在命令行中手动输入单词列表。例如,如果要查找的单词列表保存在文件 search.txt 中,您可以使用以下命令:
grep -f search.txt all.log
希望这些信息能够帮助您解决问题。
06-Linux文本处理-grep
- grep命令在一个或多个文件中查找某个字符模式。
- 如果这个模式中包含空格,就必须用引号把它括起来。
grep Tom /etc/passwd
- grep 将在文件中查找/etc/passwd 中查找模式 Tom。
- 结果如下:
- 查找成功,文件中相应行会显在屏幕上
- 没有找到指定的模式,就不会有任何输出
- 指定的文件不是一个合法的文件,屏幕上就会显示报错信息
- 发现了要查找的模式, grep 就返回退出状态 0,表示成功,
- 没找到要查找的模式,返回的退出状态为 1,
- 找不到指定文件时,退出状态将是 2。
ps -ef | grep root
- ps 命令的输出被送到 grep,然后所有包含 root 的行都被打印在屏幕上。
grep选项
选 项 功 能 -E 如果加这个选项,那么后面的匹配模式就是扩展的正则表达式,也就是 grep -E = egrep -i 比较字符时忽略大小写区别 -w 把表达式作为词来查找, 相当于正则中的"<...>"(...表示你自定义的规则) -x 被匹配到的内容,正好是整个行,相当于正则"^...$" -v 取反,也就是输出我们定义模式相反的内容 -c count.统计,统计匹配结果的行数,主要不是匹配结果的次数,是行数。 -m 只匹配规定的行数,之后的内容就不在匹配了 -n 在输出的结果里显示行号,这里要清楚的是这里所谓的行号是该行内容在原文件中的行号,而不是在输出结果中行号 -o 只显示匹配内容, grep 默认是显示满足匹配条件的一行,加上这个参数就只显示匹配结果,比如我们要匹配一个 ip 地址,就只需要结果,而不需要该行的内容。 -R 递归匹配。如果要在一个目录中多个文件或目录匹配内容,则需要这个参数 -B 输出满足条件行的前几行,比如 grep -B 3 "aa" file 表示在 file 中输出有 aa 的行,同时还要输出 aa 的前 3 行 -A 这个与-B 类似,输出满足条件行的后几行 -C 这个相当于同时用-B -A,也就是前后都输出 例子
显示包含#的行,并在前面添加行数 grep -n ‘#‘ /etc/ssh/sshd_config
显示包含#的行,并关闭大小写敏感性 grep -i ‘#‘ /etc/ssh/sshd_config
显示sshd配置文件,排除空行和以#号开头的 cat /etc/ssh/sshd_config |grep -v ‘^$‘ |grep -v ‘^#‘
显示包含s内容的所有文件名 grep -l ‘s‘ /etc/ssh/*
统计包含有#的行数 grep -c ‘#‘ /etc/ssh/sshd_config
只显示包含Port词的行 grep -w ‘Port‘ /etc/ssh/sshd_config
以上是关于linux如何实现,对某个文本循环查找多个字符串,并输出所在行的内容?的主要内容,如果未能解决你的问题,请参考以下文章