Как искать и заменять пустую строку после конкретного токена? - PullRequest
3 голосов
/ 12 декабря 2011

Я хочу удалить новые строки после строк, содержащих ключевое слово, например, как модификаторы private:, public: или protected:, чтобы соответствовать нашему стандарту кодирования. Мне нужен инструмент командной строки (Linux) для этого, поэтому, пожалуйста, не используйте Notepad ++, Emacs, VS или Vim, если они требуют взаимодействия с пользователем. Другими словами, я хочу сделать:

sed -i 's/private:\s*\n\s*\n/private:\n/g'

Я видел этот вопрос , но не смог расширить его для моих нужд.

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Если я правильно понимаю, вы хотите удалить пустые строки, следующие за строкой, содержащей private:, public: или protected:.

sed ':loop;/private:\|public:\|protected:/{n;/^$/d;Tloop}' inputfile

Пояснение:

  • :loop создать ярлык
  • /private:\|public:\|protected:/ будет искать строки, содержащие шаблон.
  • n;/^$/d загрузит следующую строку (n), проверит, является ли она пустой строкой (/^$/), и, если это так, удалите строку (d).
  • Tloop переход на метку loop если совпадений не было (строка не была пустой)

Я не гуру седа, возможно, есть более изящные способы сделать это. Также могут быть более изящные способы сделать это в awk, perl, python, как угодно.

0 голосов
/ 12 декабря 2011
perl -0777 -pi -e 's/([ \t\r]*)(private|protected|public):[ \t\r]*\n[ \t\r]*\n/$1$2:\n/g' file

должен сделать свое дело, а также принять во внимание конечные и ведущие пробелы, которые я не указал в вопросе, так как это не является обязательным требованием.

...