이런 문자열이 있다고 가정하자
test="1/2/3 4/5/6 7/8/9/0"
공백과 "/"로 구분됩니다. 각 문자열 세그먼트의 두 번째 필드를 가져와서 이와 같은 결과를 반환하고 싶습니다.
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
당신이 할 수 있는 한 가지는 공백을 개행 문자로 바꾼 다음 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"