удаление седла # и; комментарии из файлов до определенного ключевого слова - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть файлы, которые нужно удалить из комментариев и пробелов до ключевого слова. Номер строки меняется. Можно ли ограничить многократные замены sed на основе ключевого слова?

Это удаляет все комментарии и пробелы из файла:

sed -i -e 's/#.*$//' -e 's/;.*$//' -e '/^$/d' file

Например, что-то вроде этого:

# string1 
# string2
some string
; string3

; string4
####

<Keyword_Keep_this_line_and_comments_white_space_after_this>
# More comments that need to be here

; etc.

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018
sed -i '1,/keyword/{/^[#;]/d;/^$/d;}' file
0 голосов
/ 28 апреля 2018

Используйте grep -n keyword, чтобы получить номер строки, содержащий ключевое слово.

Используйте sed -i -e '1,N s/#..., когда N - номер строки, содержащий ключевое слово, чтобы удалять комментарии только в строках от 1 до N.

0 голосов
/ 28 апреля 2018

Я бы предложил использовать awk и установить флаг при достижении ключевого слова:

awk '/Keyword/ { stop = 1 } stop || !/^[[:blank:]]*([;#]|$)/' file

Установите stop в значение true, если строка содержит Keyword. Выполните действие по умолчанию (выведите строку), когда stop равно true или когда строка не соответствует регулярному выражению. Регулярное выражение соответствует строкам, чей первый непустой символ - точка с запятой или хэш, или пустые строки. Это немного отличается от вашего состояния, но я думаю, что делает то, что вы хотите.

Команда выводит на стандартный вывод, поэтому вы должны перенаправить на новый файл, а затем перезаписать оригинал, чтобы выполнить «редактирование на месте»:

awk '...' input > tmp && mv tmp input
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...