string - 如何将字符串拆分为变量/参数以传递给另一个脚本?

标签 string bash awk tokenize

我有一个文件列表(带有完整路径),我需要将其拆分为标记以便能够传递给另一个脚本/命令。查看字符串的样式,我认为 awk 是正确的工具,但我似乎无法弄清楚如何做到这一点,因为标记的数量因行而异。

给定文件名 ./some/path/to/artifact_name/v1.2.3/filename.jar,我需要能够提取以下内容:

  • filename - 最后/之后的字符串:filename.jar
  • 版本 - 文件名之后/之前的字符串:v1.2.3
  • 工件名称 - 版本之后/之前的字符串:artifact_name
  • 组名 - 路径的其余部分,所有/替换为 . : 一些.path.to

例如,给定:

./com/eric/ics/BillP/3.5.11/BillP-3.5.11.jar
- filename: BillP-3.5.11.jar
-version: 3.5.11
-artifact: BillP
-group: com.eric.ics

我最大的困难是代表该组的文件夹数量可能会发生变化。例如:./com/eric/some/other/pkg/BillP/3.5.11/BillP-3.5.11.jar 将同样有效,除了组将是 com.eric.some.other.pkg.

我的目标是在成功提取这 4 个参数后将它们传递给单独的脚本,但我似乎无法找出最简单的方法来执行此操作。 awk 是正确的工具吗?有更好/更容易使用的东西吗?

最佳答案

您可以使用 awk 或 perl 打印所有组件并将其通过管道传输到 read 以将它们分配给不同的变量名称,或者使用不太优雅的命令 dirnamebasename 多次,逐一获取组件,立即将它们存储到变量中,您可以将这些变量用作调用其他脚本的参数。看你喜欢什么。

#!/bin/bash

p="$1"
file="$(basename "$p")"
p="$(dirname "$p")"
version="$(basename "$p")"
p="$(dirname "$p")"
artifact="$(basename "$p")"
group="$(dirname "$p" | tr / . | sed 's+\.*++')"

echo file=$file version=$version artifact=$artifact group=$group

现在你在 4 个变量中有了这 4 个参数,你可以将它们传递给任何你喜欢的东西。

关于string - 如何将字符串拆分为变量/参数以传递给另一个脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27787292/

相关文章:

Java 无效的数组大小

java - 字符串(字节数组)到字节数组

bash - 如何迭代文件中的行并将字段读入变量

linux - Unix:cat 本身做什么?

ios - 尝试替换NSString中的字符串的许多实例时,内存使用过多

c# - 来自输入的字符串未转换(格式错误)

bash - Jenkins - 执行 Shell 构建步骤不起作用

awk - 结合 grep -f 和 awk

linux - 如何使用 bash 获取处理器使用百分比?

python - 脚本: Match and delete lines with specific pattern