Как упоминалось в POSIX glob — как сопоставить одну -или -более [:цифру :] глобус оболочки не равен регулярному выражению. Вы, вероятно, лучше всего обрабатываете вывод ls
с помощью grep
, и в этом случае ваш первоначально упомянутый шаблон abc_[0-9]{3}.xyz
будет работать.
Вы можете комбинировать их как таковые:
[root@ tmp]# ls -ltr abc_[0-9]+.xyz | grep abc_[0-9]{3}.xyz
Еще несколько подходов:
sed '
/^1234/!b
:1
s/^\(.\{10,19\}\) /\10/
t1' < file
perl -pe 'substr($_, 10, 10) =~ y/ /0/ if /^1234/' < file
perl -pe 's{^1234.{6}\K.{10}}{$& =~ y/ /0/r}e' < file
gawk -v FIELDWIDTHS='10 10 *' -vOFS= '
/^1234/ {gsub(/ /, "0", $2)}; {print}' < file
(С помощью perl
добавьте параметр -C
или -Mopen=locale
, если ввод является UTF -8 или должен рассматриваться как закодированный в шармапе локали вместо одного -байта на символ. надмножество ASCII ).
Вы почти у цели... небольшое изменение в вашем регулярном выражении плюс заключение s/// в цикл do -while до тех пор, пока не останется пробелов в позиции строки с 11 по 20.
sed -e '
:loop
s/^\(1234.\{6\}[0-9]\{0,9\}\) /\10/
t loop
' file
12345678909876456000qwerty
12345678909870000000qwerty
23456789011234567 qwerty