假设有一个像这样的字符串
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
您可以做的一件事是将空格替换为换行符,然后使用awk
或cut
。然后,用空格替换换行符。你会想要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"