【问题标题】:Can we use awk, sed and grep simultaneously for string operation in linuxlinux中字符串操作可以同时使用awk、sed、grep吗
【发布时间】:2023-01-28 22:24:51
【问题描述】:

我从面试中得到一个问题,我们可以同时使用 awk、sed 和 grep 吗? 我不确定为什么以及如何,但有没有可能我们同时使用所有这些来操作文件中的字符串?

【问题讨论】:

  • 是的。您可以...例如使用管道。您是否能够以这种方式解决特定任务取决于任务。不幸的是,你没有在你的问题中清楚地阐明任何具体任务,所以我们不能说更多。 (而且我们也不知道你的面试官究竟问了你什么。我认为翻译中可能丢失了一些意思。)

标签: linux


【解决方案1】:

这完全没有意义:您使用 awksedgrep 来更改字符串或从中过滤信息,为什么还要将它们组合起来同时?我认为这个问题与在一行中使用这两个命令有关,比如grep "INF" file.txt | awk '{print $1}',这是一个命令行,包含grepawk,首先只过滤包含“INF”的行,然后只显示第一列。然而,这并不意味着您同时执行两个命令:首先执行grep,然后执行awk

【讨论】:

    【解决方案2】:

    正确答案是肯定的,因为 awk 有协同进程——您可以从 awk 启动另外两个进程。

    面试官想听听你解释为什么/为什么这不是一个好主意,并了解你使用这些工具的能力水平。

    例如:在某些情况下,这可能是一个非常糟糕的主意,因为您可能会在读取文件的同时编辑文件,从而导致混乱或不可预测的结果。

    通常,如果您使用的是 awk,则不需要 grep,最后恕我直言,在“同时”脚本中混合使用 sed 和 awk 是一种糟糕的形式,因为它可能很难理解正在做什么

    【讨论】:

      【解决方案3】:

      是的,您可以在管道中一起使用 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 进行模式匹配,因为它更高效且更简单。

      【讨论】:

      • 这是我从 chatGPT 得到的,绝对正确。
      猜你喜欢
      • 2021-06-19
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 2019-10-20
      • 2015-10-03
      相关资源
      最近更新 更多