从一个长字符串中获取特定的字符串

时间:2018-12-14 14:52:50

标签: arrays string shell split

我的外壳有问题,我尝试在很长的字符串中获取一些特定的字符串。

字符串的格式为:

Something(first:test, second:test2, third:test4, fourth:test4, fifth(Field(test:1, test2:test2,...)), Any1:test1, Any2:test3.

我想获取firstthirdAny1之后的字符串。我可以很容易地用,拆分并将其作为数组值,但是我无法预测Any1的位置,因此我必须检测“ Any1”值。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

Multichar RS可能无法在所有awk(*)中都起作用,但是:

$ awk -v RS="[(,] *"  '            # record split at all the right places
BEGIN {
    a["first"];a["tird"];a["Any1"] # define the keywords we are interested in
}
split($0,b,":") && (b[1] in a) {   # split, match and score
    print b[2]
}' file
test
 test4
test1

*)可以与GNU awk,mawk和Busybox awk一起使用,但不适用于bwk awk。

答案 1 :(得分:0)

上述问题并未对解决方案施加条件或约束。另一方面,它确实提到了外壳程序(“我的外壳程序有问题”)。这是仅使用几个标准Linux实用程序的shell(bash)解决方案:grep和cut。 (但是请注意,我们假设-g开关在grep中可用,虽然在当今的Linux上似乎相当普遍,但这并不是所有平台的有效假设。)

Remove-Item -Recurse