sed -ne '/FOO/{x;P;x};/FOO/,/^$/p' testfile
Каждый блок не -пустых строк в выходных данных представляет собой один фрагмент совпадающих данных из входных данных. Количество новых строк варьируется.
Это
-n
);тогда /FOO/{x;P;x}
-использует пустое место хранения ); /FOO/
)и заканчивая пустыми строками(/^$/
); и, наконец, p
). this line contains FOO
this line is not blank
This line also contains FOO
This line contains FOO too
Not blank
Also not blank
FOO!
Yet more random text
FOO!
Перенаправить файл напрямую наwhile... done
:
mount | grep ^\/dev/ > tempoary
while IFS= read -r line
do
...
done < temporary
или используйте замену процесса, чтобы исключить временный файл:
while IFS= read -r line
do
...
done < <(mount | grep ^\/dev/)
или аналогичный переход к while
mount | grep ^\/dev/ |
while IFS= read -r line
do
...
done
Добавление IFS перед циклом for и заключение переменной файла в кавычки делают все нормально... Проверьте это:
#!/bin/bash
mount | grep ^\/dev/ > tempoary
input=$(cat tempoary)
x=0
while IFS= read -r line
do
x=$((x+1))
echo "$line" > /tmp/tmp/$x
IFS=
for file in $(echo "$line"); do
eval "var$x='$file'";
echo "$file"
done
done <<< "$input"
На основании комментария
the outputs are "/dev/mapper/rhel-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)" and "/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)" respectively. After saving these 2 lines into variable1 and variable2
Стандартные переменные не всегда являются лучшим ответом. Вместо этого массив , скорее всего, будет тем, что вам нужно.
Например:
#!/bin/bash
typeset -A mounts
let index=0
m=$(mount | grep "^/dev/")
while read line
do
mounts[$index]="$line"
let index=index+1
done <<< "$m"
echo There were $index lines
let a=0
while [ $a -lt $index ]
do
echo Line $a was ${mounts[$a]}
let a=a+1
done
На моей машине, если я запущу это, я получу
There were 4 lines
Line 0 was /dev/vda3 on / type ext4 (rw,relatime,data=ordered)
Line 1 was /dev/vda1 on /boot type ext4 (rw,relatime,data=ordered)
Line 2 was /dev/vdb on /news type ext3 (rw,relatime,data=ordered)
Line 3 was /dev/vdc1 on /brick type ext3 (rw,relatime,data=ordered)