Я использую SED в macOS, чтобы удалить все строки в файле, соответствующие двум разным шаблонам внутри него:

# remove all lines containing "WORLD XMAX" and "WORLD YMAX" w/o dublication of the file

sed -i '' -e '/WORLD XMAX/d' -e '/WORLD YMAX/d'  file

В результате он удаляет первый шаблон, но не второй. Как это можно исправить?

0
terdon 27 Окт 2020 в 18:47
2
Я не могу воспроизвести эту проблему. Он удаляет обе строки правильно. Приведите минимальный воспроизводимый пример.
 – 
thanasisp
27 Окт 2020 в 18:39
Обратите внимание, что команда удалит любую строку, соответствующую либо WORLD XMAX или WORLD YMAX. Это то, что вы хотите? Потому что ваш вопрос касается удаления строк, содержащих оба шаблона.
 – 
terdon
27 Окт 2020 в 18:48
Да, мне нужно удалить все строки, соответствующие обоим шаблонам. Обычно в моем файле есть только две строки: одна начинается с WORLD XMAX, а другая начинается с WORLD YMAX. Мне нужно удалить их обоих. Вот что я делаю: sed -i '' -e '/^WORLD XMAX/d' -e '/^WORLD YMAX/d' файл
 – 
user3470313
27 Окт 2020 в 18:53
2
Пожалуйста, отредактируйте свой вопрос и включите файл примера. Убедитесь, что в нем есть строки, которые вы должны сохранить, и строки, которые вы хотите удалить.
 – 
terdon
27 Окт 2020 в 18:59
Да, но что я хотел бы сказать, что последняя версия работает нормально: sed -i '' -e '/^WORLD XMAX/d' -e '/^WORLD YMAX/d' файл я не знаю, в чем разница между этим и то, что я указал в своей первой теме, за исключением того, что теперь я сопоставляю все строки, начинающиеся с WORLD XMAX или WORLD YMIN
 – 
user3470313
27 Окт 2020 в 19:02

1 ответ

Вот возможное решение.

sed -i '/WORLD XMAX/d; /WORLD YMAX/d' file

Sed будет сопоставлять оба шаблона в каждой строке и удалять их всякий раз, когда найдет.

0
Akuseru 28 Окт 2020 в 18:36