Фильтрация переменной в скрипте bash с использованием регулярных выражений tr или awk - PullRequest
1 голос
/ 09 марта 2020

row1=$('+00 00:30:07.880000')

rowX=$('row1 | tr -dc '0-9')

Я хочу отфильтровать все специальные символы и пробел.

I sh для вывода следующим образом.

echo $'row1' = 003007.880000

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Для этого вам не нужны регулярные выражения или внешние команды, такие как tr. Расширение встроенного параметра Bash может сделать это:

row1='+00 00:30:07.880000'
row1=${row1//[^0-9.]/}
echo "row1=$row1"

выходы row1=00003007.880000.

Выход имеет два ведущих нуля, которых нет в выводе, предложенном в вопросе. , Возможно, существует неустановленное требование удалить префиксы, разделенные пробелами. Если это так, возможный код:

row1='+00 00:30:07.880000'
row1=${row1##* }
row1=${row1//[^0-9.]/}
echo "row1=$row1"

, который выводит row1=003007.880000.

См. Как выполнять манипуляции со строками в bash? для объяснения ${row1//[^0-9.]/} и ${row1##* }.

1 голос
/ 09 марта 2020

Это самый простой способ сделать это:

$ echo '+00 00:30:07.880000' | tr -dc '[0-9].'
00003007880000

С уважением!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...