【问题标题】:How to get unique results with grep?如何使用 grep 获得独特的结果?
【发布时间】:2014-12-31 18:33:50
【问题描述】:

下面提到的场景是我想作为詹金斯工作的一部分实现的逻辑的一部分。我正在尝试编写一个 shell 脚本。

我正在使用 grep 命令递归搜索特定字符串。 grep 返回的示例结果如下:

./src/test/java/com/ABC/st/test/pricing/Test1.java: @Tags({ "B-05256" }) ./src/test/java/com/ABC/st/test/pricing/Test1.java: @MapToVO(storyID = "B-05256: ST 价格") ./src/test/java/com/ABC/st/test/pricing/Test1.java: @Tags({ "B-05256" }) ./src/test/java/com/ABC/st/test/pricing/Test2.java: @Tags({ "B-05256" }) ./src/test/java/com/ABC/st/test/pricing/Test2.java: @MapToVO(storyID = "B-05256:本季最低价") ./src/test/java/com/ABC/st/test/pricing/Test2.java: @Tags({ "B-05256" })

我想提取唯一的文件路径,例如:

/src/test/java/com/ABC/st/test/pricing/Test1.java
/src/test/java/com/ABC/st/test/pricing/Test2.java

然后在 maven 命令中使用每个唯一路径。所以:

  1. 如何从 grep 命令给出的结果集中提取唯一的文件路径?

  2. 我如何运行循环之类的东西,在每次迭代中我使用唯一的文件路径执行 mvn 命令?

【问题讨论】:

  • 感谢大家的建议。我已使用此命令提取所有唯一文件路径: find . -type f -name "*.java" -exec grep -il 'stella-env-upgrade' {} \;现在我想在每个文件路径上执行一个 Maven 命令。我该怎么做?
  • 在此处选择一个答案作为正确答案,如果您仍需要更多帮助,请提出后续问题。但是您的问题的答案可能会涉及使用xargs。您也可以只使用grep,而无需将find-r--include 标志一起使用到grep

标签: bash


【解决方案1】:

如果您只需要匹配文件的名称,grep 有一个命令行开关:

-l, --files-with-matches
       Suppress  normal  output; instead print the name of each input file from which output
       would normally have been printed.  The scanning will stop on the first match.  (-l is
       specified by POSIX.)

【讨论】:

  • 谢谢。现在我如何对该文件名执行命令。例如,我如何将该文件名传递给 Maven 命令。我对 shell 脚本很陌生。
【解决方案2】:

将您的文本输入

sed 's/:.*//' | sort -u | while read path
do
    echo now execute your command using "$path"
done

【讨论】:

    【解决方案3】:

    这就是 -l 标志到 grep 的用途。

    -l, --files-with-matches

    抑制正常输出;而是打印通常会从中打印输出的每个输入文件的名称。扫描将在第一次匹配时停止。 (-l 由 POSIX 指定。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多