個別ではなく両方に基づいて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]/各文字列ではなく文字通り2つの文字列があるときに文字列を分離することです。

ベストアンサー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

おすすめ記事