sed: Проигнорируйте строку стартовый пробел для соответствия

попробуйте это:

grep -R 'mystring' . | cut -d: -f 1 | uniq| xargs -n 1 -I {} -t -i ksh  -c "touch /tmp/$(basename {})"
6
09.09.2013, 10:14
2 ответа

Измените свое соответствие шаблону никакие пробелы выгоды прежде liste следующим образом:

/^\s*Listen/

Это будет включать все

Listen ..
    Listen ...

и другие.

5
27.01.2020, 20:23
  • 1
    Соответствие точно как требуется. Но это съест пробел в замене также. Но это не должно быть проблемой.Спасибо! –  user1263746 09.09.2013, 10:43
  • 2
    Можно поместить пробел в группу и использовать это в замене. Например, s/^(\s*)Listen(.*)$/\1Listen/ (или что-то во многом как он; попробуйте его перед использованием его на чем-либо ценном). –  a CVn 09.09.2013, 10:56
  • 3
    Michael Спасибо это точно, на что я надеялся. Маленькая фиксация: как круглые скобки нужно оставить так: s/^\\(\s* \) Слушают (. $/\1listen/ –  pmont 14.01.2015, 19:07
  • 4
    @pmont с гну sed Вы может использовать sed -r вместо этого выход. ссылка –  rush 14.01.2015, 20:11

Просто позвольте регулярному выражению соответствовать пробелу также. Можно использовать любого группа символов [ \t] (который соответствует пробелам или символам табуляции), или эквивалентное выражение скобки POSIX [:blank:].

Следовательно, /^Listen/ становится /^[[:blank:]]*Listen/. (Обратите внимание, что выражение скобки эффективно записано с парой двойной квадратной скобки.)

6
27.01.2020, 20:23
  • 1
    Работа отлично. И то же как принятый ответ, за исключением того, что принятый ответ более читаем.Спасибо! –  user1263746 09.09.2013, 10:47

Теги

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