Допустим, у меня есть строка из 4 чисел, разделенных пробеломРегулярное выражение для строки чисел
1 4 16 28
# stored in $ids
Таким образом, чтобы получить 4 номер отдельно от четырех переменных я использую
id1=$(echo $ids | sed -r "s/([0-9]+){0}([0-9]+) ?.*/\2/g")
id2=$(echo $ids | sed -r "s/([0-9]+){1}([0-9]+) ?.*/\2/g")
id3=$(echo $ids | sed -r "s/([0-9]+){2}([0-9]+) ?.*/\2/g")
id4=$(echo $ids | sed -r "s/([0-9]+){3}([0-9]+) ?.*/\2/g")
Но проблема в том, что если строка имеет менее 4 чисел, предыдущие числа повторяются.
Например, если строка была
1
то, что мы получим это
id1=1
id2=1
id3=1
id4=1
То, что я хочу, что, если есть меньше числа, то дополнительные переменные должны иметь значение 0
.
Есть ли способ сделать это?
Примечание: можно использовать только СЕПГ
Вы вообще не можете использовать 'sed'? это даст вам превосходный скрипт, который будет работать быстрее! 'IFS = '' read -ra id_ary <<<" $ ids "; для i в {0..3}; do [[$ {id_ary [i]} = + ([[: digit:]])]] || id_ary [I] = 0; сделанный; id_ary = ("$ {id_ary [@]: 0: 3}") '. На данный момент у вас есть массив 'id_ary', который содержит 4 требуемых номера (если поле не является числом, то оно заменяется на' 0'). –
Почему только 'sed'? когда вы можете использовать собственные методы bash, чтобы добиться этого? – Inian
Проблема в том, что версия bash, в которой работает моя среда, довольно проста и урезана. Многие функции не работают, например, массивы. – Haris