如何剪切已经用空格分隔的字符串?

如何剪切已经用空格分隔的字符串?

假设有一个像这样的字符串

test="1/2/3 4/5/6 7/8/9/0"

它们由空格和“/”分隔。我想通过获取每个字符串段的第二个字段来返回这样的结果。

2 5 8

可以用 cut 来做到这一点吗?或者我还需要别的东西吗?

newstring=$(echo $test | cut -d "/" -f2)

仅返回

2

我不知道该怎么办。

答案1

zsh

$ echo ${${${=test}#*/}%%/*}
2 5 8

否则,你可以这样做:

$ printf '%s\n' "$test" | sed 's|[^ /]*/\([^/]*\)[^ ]*|\1|g'
2 5 8

答案2

您可以做的一件事是将空格替换为换行符,然后使用awkcut。然后,用空格替换换行符。你会想要echo整个事情再次得到最后的换行符:

$ echo $(echo "$test" | tr ' ' '\n' | awk -F'/' '{print $2}' | tr '\n' ' ')
2 5 8

或者

$ echo $(echo "$test" | tr ' ' '\n' | cut -d/ -f 2 | tr '\n' ' ')
2 5 8

您也可以只使用perl

$ echo "$test" | perl -lane 's#.*?/(.+?)/.*#$1# for @F; print "@F"' 
2 5 8

答案3

如果你要求cut

cut -d/ -f2,4,6 --output-delimiter=' ' <<<"$test"

相关内容