bash - 如何过滤掉 ./gradlew project:dependencies 命令的某个部分?(第 2 版)
问题描述
我发布了如何过滤掉 ./gradlew project:dependencies 命令的某个部分?不久前并实施了已接受的答案。但是,它似乎给了我错误的信息。
我有以下(简化)build.gradle
文件
dependencies {
implementation("com.myco.security:security-service-client:1.0.199")
}
当我运行命令时
$ ./gradlew :project:dependencies | tee deps.txt
我在文件中看到了以下内容deps.txt
,缩写为仅显示我想要的工件。
compileClasspath - Compile classpath for source set 'main'.
+--- com.myco.security:security-service-client:1.0.199 -> 1.0.148
+--- com.myco.security:security-service-client:1.0.148 (*)
default - Configuration for default artifacts.
+--- com.myco.security:security-service-client:1.0.199 -> 1.0.148
+--- com.myco.security:security-service-client:1.0.148 (*)
+--- com.myco.security:security-service-client:1.0.148 (*)
implementation - Implementation only dependencies for source set 'main'. (n)
+--- com.myco.security:security-service-client:1.0.199 (n)
+--- com.myco.security:security-service-client:1.0.148 (n)
runtimeClasspath - Runtime classpath of source set 'main'.
+--- com.myco.security:security-service-client:1.0.199 -> 1.0.148
testCompileClasspath - Compile classpath for source set 'test'.
+--- com.myco.security:security-service-client:1.0.199 -> 1.0.148
+--- com.myco.security:security-service-client:1.0.148 (*)
testRuntimeClasspath - Runtime classpath of source set 'test'.
+--- com.myco.security:security-service-client:1.0.199 -> 1.0.148
+--- com.myco.security:security-service-client:1.0.148 (*)
IOW,我的build.gradle
文件中的依赖项出现多次。现在,如果我在原始链接帖子中应用答案,我会得到
com.myco.security:security-service-client:1.0.199
com.myco.security:security-service-client:1.0.148
作为工件,而不是以下内容,这是我想要匹配build.gradle
文件中的依赖项的内容。
com.myco.security:security-service-client:1.0.199
如何改进awk
链接帖子中的命令?IOW
cat deps.txt | awk '/^\+.*com\.myco/ && !seen[$2]++{print $2}' | some_other_cmd
应该只给我
com.myco.security:security-service-client:1.0.199
解决方案
你可以使用这个 awk:
awk -F '[: ]+' -v OFS=: '/^\+.*com\.myco/ && !seen[$2,$3]++{print $2, $3, $4}' deps.txt
com.myco.security:security-service-client:1.0.199
细节:
- 使用
-F '[: ]+'
我们在空格或冒号上拆分列 - 使用
-v OFS=:
我们使用冒号作为输出文件分隔符 seen[$2,$3]
使用group:module
依赖作为数组键print $2, $3, $4
印刷group:module:version
推荐阅读
- smartcontracts - 使用 Nethereum 获取代币和合约信息
- c# - 从 C# 错误中的列表操作点获取唯一值
- python - 什么时候在 Django 中执行 post_save() 信号?
- c# - c#如何按预期名称在excel文件中搜索,没有'%example'%或列名='行值'之类的类型
- python - 为什么我的元组列表只有一个条目?
- python-3.x - python webscraping与BeautifulSoup问题
- c++ - std:hash 可以访问类的私有成员
- c# - 如何正确划分编辑位图的任务以进行过滤器的并行处理
- ffmpeg - 面对上行错误,将两个 MPEG-TS 多播连续再复用为单个 MPEG-TS 多播
- python - 如何打印字符串中每个单词的第一个字母?