このような文字列があるとしましょう。
test="1/2/3 4/5/6 7/8/9/0"
スペースと「/」で区切られます。各文字列セグメントの2番目のフィールドを取得して、このような結果を返したいと思います。
2 5 8
カットを使ってこれを行うことはできますか?それとも別のものが必要ですか?
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
あなたができることの1つは、スペースを改行文字に置き換えてから、または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"