尝试使用 grep 查找内容,然后输出该行的不同部分

Trying to use grep to find something, then output a different part of the line

例如,我正在搜索这样的一行:

颜色 asdf

然后我使用 grep 来查找该行,例如 grep asdf file.txt 我将如何显示颜色?学习linux很难。

你可以使用 sed:

sed -n 's/[[:space:]][[:space:]]*asdf$//p' file.txt

详情:

  • -n选项告诉sed不要自动打印模式space。基本上,除非你告诉它,否则它不会输出任何东西。
  • seds命令替换文本。在这里,如果一行以 asdf 结尾,前面至少有一个白色 space 字符,我们将所有字符替换为空,然后打印该行(注意末尾的 p 标志s 命令)。只有当某些东西被实际替换时,打印才会完成。有关 s 命令的更多信息,请参见 e。 G。在 GNU sed manual.

编辑 为清楚起见:使用单引号时,参数扩展不起作用,因此不会替换变量。要使用变量,请使用双引号:

search=asdf
sed -n "s/[[:space:]][[:space:]]*${search}$//p" file.txt

使用命令行工具 sed 您可以使用正则表达式替换字符串:

echo "Color asdf" | sed 's/\([^ ]*\).*//'

这部分:\([^ ]*\).*是一个正则表达式。正则表达式的第一部分:[^ ]*,尽可能多次匹配除 space 之外的任何字符,并且 \(\) 之间的字符被捕获到变量 </code>。然后,您还将字符串的其余部分与 <code>.* 匹配,并通过在 sed命令。

这里有一些关于 sed 的更多信息: http://linux.about.com/od/commands/a/Example-Uses-Of-Sed-Cmdsedxa.htm

如果您真的想在这里使用 grep,您可以将 grep 的输出通过管道传输到 cut:

grep -h asdf *.txt | cut -s -d  -f 1

请注意 cut-d 选项后必须有两个空格 - 第一个告诉 cut 使用空格作为字段分隔符(我假设你字段以空格分隔而不是制表符分隔),而第二个选项将 -d 选项与以下选项 (-f).

分开

但是,是的,sedawk 可能是您在这里的朋友...:-)

您可以使用 grep

为行中的图案着色
grep --colour -o 'asdf' file.txt

编辑:-o 选项将只打印模式