Скрипт Bash для комментирования и раскомментирования строк

Скрипт Bash для комментирования и раскомментирования строк

надеюсь, у вас все хорошо в это время. Дело в том, что я хотел бы прокомментировать некоторые строки в моем txt-файле. У меня есть код для комментирования и раскомментирования нескольких строк, однако я не знаю, как получить название компании. Мой текстовый файл имеет следующую схему:lunar_static KKK_<countryname>_NUM 08.00.name

lunar_static KKK_USA_NUM 08.00.Winter
lunar_static KKK_ITALY_NUM 08.Winter
lunar_static KKK_ITALY_NUM 08.00.Spring
lunar_static KKK_ITALY_NUM 08.00.Autumn
lunar_static KKK_SPAIN_NUM 08.00.Winter
lunar_static KKK_SPAIN_NUM 08.00.Spring
lunar_static KKK_FRANCE_NUM 08.00.Autumn
lunar_static KKK_FRANCE_NUM 08.00.Autumn
lunar_static KKK_ITALY_NUM 08.00.Ferari-taxi
lunar_static KKK_ITALY_NUM "/^08\\.00\\.Delta\\ M$/"
lunar_static KKK_ROMANIA_NUM "/^08\\.00\\.Delta\\ M$/"
lunar_static KKK_ITALY_NUM "/^08\\.00\\.Red\\_Park$/"

и я хочу прокомментировать ИТАЛИЯ с именем Autumn, Ferari-taxi, Delta M, Red_Park. Я знаю, как прокомментировать несколько имен с sed, например

sed -i '/Winter\|Spring/s/^/#/' file2.txt

и раскомментируйте

sed -i '/Spring/s/^#//' file2.txt

но он выбирает все имена, несмотря на название страны. Не знаю, как получить страну. ОЖИДАЕМЫЙ ВЫХОД

    lunar_static KKK_USA_NUM 08.00.Winter
    lunar_static KKK_ITALY_NUM 08.Winter
    lunar_static KKK_ITALY_NUM 08.00.Spring
    #lunar_static KKK_ITALY_NUM 08.00.Autumn
    lunar_static KKK_SPAIN_NUM 08.00.Winter
    lunar_static KKK_SPAIN_NUM 08.00.Spring
    lunar_static KKK_FRANCE_NUM 08.00.Autumn
    lunar_static KKK_FRANCE_NUM 08.00.Autumn
    #lunar_static KKK_ITALY_NUM 08.00.Ferari-taxi
    #lunar_static KKK_ITALY_NUM "/^08\\.00\\.Delta\\ M$/"
    lunar_static KKK_ROMANIA_NUM "/^08\\.00\\.Delta\\ M$/"
    #lunar_static KKK_ITALY_NUM "/^08\\.00\\.Red\\_Park$/"

Буду рад любому совету. Спасибо!

решение1

Вам необходимо включить целевую страну в поисковый ITALYзапрос, сгруппировать альтернативы (Autumn|Delta....)и разрешить символы между .*двумя поисковыми запросами.

sed -E '/ITALY.*(Autumn|Delta.. M|Red.._Park|Ferari-taxi)/s/^/#/' file1

Это с небольшим читом, \чтобы избежать побегов.

sed -E '/ITALY.*(Autumn|Delta\\\\ M|Red\\\\_Park|Ferari-taxi)/s/^/#/' file1

Внесите изменения в тот же файл, включив -iфлаг на месте дляsed

sed -i -E .....

РедактироватьВы могли бы опубликовать это как другой вопрос, но...

"...можно ли найти слова \\без ввода текста\\\\ sed ?..."другими словами безпобегих.

Нет. И причина в том, чтоздесь:

Символ '\', когда за ним следуют некоторые обычные символы, приобретает особое значение.

Итак, если в вашей сопоставляемой строке символ после \является одним из зарезервированных пар (например \+, , \?, \n), как sedузнать, ищете ли вы литерал \nили символ новой строки?

Поэтому каждый \символ, который предполагается читать буквально, необходимо экранировать, чтобы sedоднозначно дать понять, что он не является частью какой-либо зарезервированной последовательности символов.

Связанный контент