Как использовать sed для удаления группы строк на основе шаблона, который повторяется? - PullRequest
1 голос
/ 08 июня 2011

У меня есть файл с таким содержимым:

[device]  
type=alpha  
instance=0  

[device]  
type=beta  
instance=1  

[device]  
type=gamma  
instance=2  

Я пытаюсь понять, как удалить строки

[device]  
type=beta  
instance=1  

Я не могу использовать удаление диапазона между [device] и instance = 2, так как оно удаляет первый раздел устройства.

Спасибо.

1 Ответ

1 голос
/ 08 июня 2011

Самый простой способ - сначала заменить все новые строки каким-либо уникальным символом (например, !), а затем пропустить его через sed, как показано ниже:

tr '\n' '!' < file.txt | sed 's/\[device\]!type=beta!instance=1//g' | tr '!' '\n'

В качестве альтернативы, вы можете выполнить многострочный поиск и замена с использованием только sed:

sed -n '
# if the first line copy the pattern to the hold buffer
1h
# if not the first line then append the pattern to the hold buffer
1!H
# if the last line then ...
$ {
        # copy from the hold to the pattern buffer
        g
        # do the search and replace
        s/\[device\]\ntype=beta\ninstance=1//g
        # print
        p
}
' file.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...