【发布时间】:2023-01-28 22:24:51
【问题描述】:
我从面试中得到一个问题,我们可以同时使用 awk、sed 和 grep 吗? 我不确定为什么以及如何,但有没有可能我们同时使用所有这些来操作文件中的字符串?
【问题讨论】:
-
是的。您可以...例如使用管道。您是否能够以这种方式解决特定任务取决于任务。不幸的是,你没有在你的问题中清楚地阐明任何具体任务,所以我们不能说更多。 (而且我们也不知道你的面试官究竟问了你什么。我认为翻译中可能丢失了一些意思。)
标签: linux
我从面试中得到一个问题,我们可以同时使用 awk、sed 和 grep 吗? 我不确定为什么以及如何,但有没有可能我们同时使用所有这些来操作文件中的字符串?
【问题讨论】:
标签: linux
这完全没有意义:您使用 awk、sed 和 grep 来更改字符串或从中过滤信息,为什么还要将它们组合起来同时?我认为这个问题与在一行中使用这两个命令有关,比如grep "INF" file.txt | awk '{print $1}',这是一个命令行,包含grep和awk,首先只过滤包含“INF”的行,然后只显示第一列。然而,这并不意味着您同时执行两个命令:首先执行grep,然后执行awk。
【讨论】:
正确答案是肯定的,因为 awk 有协同进程——您可以从 awk 启动另外两个进程。
面试官想听听你解释为什么/为什么这不是一个好主意,并了解你使用这些工具的能力水平。
例如:在某些情况下,这可能是一个非常糟糕的主意,因为您可能会在读取文件的同时编辑文件,从而导致混乱或不可预测的结果。
通常,如果您使用的是 awk,则不需要 grep,最后恕我直言,在“同时”脚本中混合使用 sed 和 awk 是一种糟糕的形式,因为它可能很难理解正在做什么
【讨论】:
是的,您可以在管道中一起使用 sed、awk 和 grep 对同一输入执行多个操作。
例如,您可以使用 grep 过滤输入并仅选择与特定模式匹配的行,然后将输出通过管道传输到 awk 以对选定的行执行计算,最后将输出通过管道传输到 sed 以执行文本转换。
下面是在管道中一起使用 grep、awk 和 sed 的示例:
猫文件.txt | grep -E '模式' | awk '{print $1}' | sed 's/旧文本/新文本/g'
在本例中,cat 命令用于打印 file.txt 的内容。输出通过管道传输到 grep -E 'pattern',它过滤与正则表达式 'pattern' 匹配的行。然后将输出通过管道传输到 awk '{print $1}',它打印所选行的第一个字段。最后,输出通过管道传输到 sed 's/old-text/new-text/g',它将所选行中所有出现的 'old-text' 替换为 'new-text'。
您还可以以不同的方式一起使用 sed、awk 和 grep,上面的示例只是使用它的一种方式。每个工具都有自己的优势,可以用于不同的特定用例。还需要注意的是,sed 和 awk 也可以执行模式匹配,但通常建议使用 grep 进行模式匹配,因为它更高效且更简单。
【讨论】: