Как выделить 2 символа IFS для разделения на основе того и другого, а не отдельно в сценариях оболочки?

Я использую приведенный ниже сценарий 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

Строка разбивается на основе пробела или / . Я хочу разделить строку, когда есть буквально оба [пробел] / , а не каждая из них по отдельности.

0
01.02.2017, 14:51
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

2
28.01.2020, 02:46

Теги

Похожие вопросы