linux - 如何grep模式后的内容?

标签 linux grep

给定一个文件,例如:

potato: 1234
apple: 5678
potato: 5432
grape: 4567
banana: 5432
sushi: 56789

我想对所有以 potato: 开头的行进行 grep,但只用管道显示 potato: 后面的数字。所以在上面的例子中,输出将是:

1234
5432

我该怎么做?

最佳答案

grep 'potato:' file.txt | sed 's/^.*: //'

grep 查找包含字符串 potato: 的任何行,然后,对于这些行中的每一行, sed 替换( s/// - 替换)从行首( .* )到序列的最后一次出现的任何字符( ^ ) :(冒号后跟空格)和空字符串( s/...// - 用第二部分替换第一部分,第二部分为空)。

grep 'potato:' file.txt | cut -d\   -f2

对于包含 potato: 的每一行, cut 将把该行拆分为由空格分隔的多个字段( -d\ - d = 分隔符,\ = 转义的空格字符,类似 -d" " 的内容也可以使用)并打印每个字段的第二个字段行(-f2)。

grep 'potato:' file.txt | awk '{print $2}'

对于包含 potato: 的每一行, awk 将打印第二个字段 ( print $2 ),该字段默认由空格分隔。

grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'

包含 potato: 的所有行都被发送到一个内联 ( -e ) Perl 脚本,该脚本从 stdin 获取所有行,然后,对于这些行中的每一行,执行与上面第一个示例相同的替换,然后打印它。

awk '{if(/potato:/) print $2}' < file.txt

文件通过 stdin 发送(< file.txt 通过 stdin 将文件的内容发送到左侧的命令)到 awk 脚本,对于包含 potato: 的每一行(如果正则表达式 if(/potato:/) 与当前匹配,则 /potato:/ 返回 true line),打印第二个字段,如上所述。

perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt

文件通过 stdin ( < file.txt ,见上文) 发送到与上述类似的 Perl 脚本,但这次它还确保每一行都包含字符串 potato: ( /potato:/ 是一个正则表达式,如果当前行包含 potato: ,如果包含 ( && ),则继续应用上述正则表达式并打印结果。

关于linux - 如何grep模式后的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358547/

相关文章:

linux - 在 Bash 脚本 for 循环中迭代 IPv6 地址列表

regex - Grep Regex 匹配任何内容,包括换行符

javascript - 将带有方括号的字符串转换为方括号内容合并的列表

linux - Xampp 和 Apache : Alias 'access denied'

python - 有没有办法使用 Python 发现用户的 Windows 桌面路径?

linux - 如何将键盘连接到 tinyX 服务器

python - Python中的子进程执行两个任务?

regex - 带有多个参数的 pgrep -f

Linux:在用户已准备好输入名称的文本文件中搜索字符串

tcp - 使用一系列 TCP 端口计算连接数的脚本