Заменить пробелы в определенных позициях

Как упоминалось в POSIX glob — как сопоставить одну -или -более [:цифру :] глобус оболочки не равен регулярному выражению. Вы, вероятно, лучше всего обрабатываете вывод lsс помощью grep, и в этом случае ваш первоначально упомянутый шаблон abc_[0-9]{3}.xyzбудет работать.

Вы можете комбинировать их как таковые:

[root@ tmp]# ls -ltr abc_[0-9]+.xyz | grep abc_[0-9]{3}.xyz

0
27.02.2021, 07:55
2 ответа

Еще несколько подходов:

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 ).

3
18.03.2021, 22:28

Вы почти у цели... небольшое изменение в вашем регулярном выражении плюс заключение s/// в цикл do -while до тех пор, пока не останется пробелов в позиции строки с 11 по 20.

sed -e '
  :loop
    s/^\(1234.\{6\}[0-9]\{0,9\}\) /\10/
  t loop
' file

12345678909876456000qwerty
12345678909870000000qwerty
23456789011234567   qwerty
3
18.03.2021, 22:28

Теги

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