Почему эта команда sed не работает для регулярных выражений? - PullRequest
0 голосов
/ 09 января 2019

Я хочу удалить многострочные комментарии в Java с помощью команды sed. Регулярное выражение работает, если мы используем диапазоны символов, такие как a-zA-Z0-9 и т. Д., Но не в случае символов слова, таких как \w\S.

Содержимое тестового файла:

hello world
/* abcd
efgh*/
world hello

Используемая команда:

sed -i -e  "s/\/\*[\s\S]\*\///" <file>

Ожидаемые результаты:

hello world
world hello

Фактические результаты:

hello world
 abcd
efgh*/
world hello

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Это возможно с помощью sed, но не так просто.

sed ':x ; /^\/\*/ { N ; s/.*\*\/// ; /^$/d ; bx }' file
  • :x это этикетка
  • /^\/\*/ is / *
  • N добавить строку из ввода в пространство образца
  • s/.*\*\/// заменить любое {...} * /
  • /^$/d удалить пустую строку
  • bx безусловный переход к: x

Узнайте больше здесь в документации

0 голосов
/ 09 января 2019

Вы можете использовать grep с регулярным выражением (-E) и инвертированными совпадениями (-v), т. Е .:

grep -Ev '(\/\*|\*\/)' < text.txt

Выход:

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