개별적으로가 아닌 둘 다를 기반으로 IFS 2 문자를 제공하여 쉘 스크립트에서 분할하는 방법은 무엇입니까?

개별적으로가 아닌 둘 다를 기반으로 IFS 2 문자를 제공하여 쉘 스크립트에서 분할하는 방법은 무엇입니까?

다음 bash 스크립트를 사용하여 문자열을 분할합니다.

string='/dev/shm: 0%used(0MB/4003MB) /var/spool/site/storage/users: 64%used(64437MB/100760MB) /run/user/1001: 0%used(0MB/801MB) /run: 10%used(165MB/1601MB) /run/lock: 0%used(0MB/5MB) /run/user/112: 0%used(0MB/801MB) /sys/fs/cgroup: 0%used(0MB/4003MB) /: 80%used(40518MB/50364MB) (>80%) : WARNING '
IFS=' /' # delimit on [SPACE]/
set -f # disable the glob part
array=($string) # invoke the split+glob operator

for i in "${array[@]}"; do echo '/'$i; done

문자열 space은 또는 기준으로 분할됩니다 /. 내가 달성하고 싶은 것은 [space]/각 문자열이 아닌 문자 그대로 두 개의 문자열이 있을 때 문자열을 분리하는 것입니다.

답변1

구분 기호로 사용 awk하고 지정할 수 있습니다 ' /'.

$ cat data
/dev/shm: 0%used(0MB/4003MB) /var/spool/site/storage/users: 64%used(64437MB/100760MB) /run/user/1001: 0%used(0MB/801MB) /run: 10%used(165MB/1601MB) /run/lock: 0%used(0MB/5MB) /run/user/112: 0%used(0MB/801MB) /sys/fs/cgroup: 0%used(0MB/4003MB) /: 80%used(40518MB/50364MB) (>80%) : WARNING
$ cat data | awk -F' /' '{for(i=1;i<=NF;i++){print $i}}'
/dev/shm: 0%used(0MB/4003MB)
var/spool/site/storage/users: 64%used(64437MB/100760MB)
run/user/1001: 0%used(0MB/801MB)
run: 10%used(165MB/1601MB)
run/lock: 0%used(0MB/5MB)
run/user/112: 0%used(0MB/801MB)
sys/fs/cgroup: 0%used(0MB/4003MB)
: 80%used(40518MB/50364MB) (>80%) : WARNING

이 문서를 참조하세요:https://stackoverflow.com/questions/23114583/bash-script-split-string-using-regex-delimiter

관련 정보