надеюсь, у вас все хорошо в это время. Дело в том, что я хотел бы прокомментировать некоторые строки в моем 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
однозначно дать понять, что он не является частью какой-либо зарезервированной последовательности символов.