Что не так с моим sed RE? Не удается найти шаблон и заменить

С sedвам также не нужен внешний контур:

sed -E '$!N;s/(.*)\n(.*)/"\2" "\1"/' file
  • -Eзаключается в использовании расширенного регулярного выражения, что облегчает чтение ()
  • $!Nвсегда соединяет(N)две строки в пространстве шаблона, кроме последней строки ($!), если должна быть непарная строка
  • s/(.*)\n(.*)/"\2" "\1"/переворачивает обе строки, заменяет новую строку пробелом и добавляет двойные кавычки
3
22.05.2021, 15:54
1 ответ

По умолчанию sedиспользует базовые регулярные выражения POSIX и не понимает \s, \wили даже {}. Он также не знает, как сопоставить \n, так как это конец строки. Портативный способ сделать это будет:

sed 's/^Document [a-zA-Z0-9-]\{25\}$/MYLINEBREAK/' file

Почти столь же переносимым является использование -Eдля включения расширенных регулярных выражений:

sed -E 's/^Document\s[a-zA-Z0-9-]{25}$/MYLINEBREAK/' file

Что, по крайней мере, в GNUsed(и в Linux )позволяет вам еще больше упростить почти до того, что было в начале:

sed -E 's/^Document\s\w{25}$/MYLINEBREAK/' file

См. Почему мое регулярное выражение работает в X, но не в Y? для более подробной информации о различных вариантах регулярных выражений.

7
28.07.2021, 11:30

Теги

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