Intereting Posts
Поиск дубликатов изображений с открытым исходным кодом для Linux? Использование awk для хранения двоичного числа в текстовом файле в виде строки, а затем преобразование в шестнадцатеричное Что именно происходит, когда я набираю «startx» в командной строке? Доступ к папке, созданной в окнах Как я могу применить патч -p0 из любого рабочего каталога? Моя вкладка alt + только показала только оконные окна – что я нажал? du: объединить обе метки времени Каковы точки подключения, совместимые с FHS? Как настроить Syslinux для загрузки изображений ядра с другого раздела или диска? tar добавить в архив в архиве grep линии, начинающиеся с «1» в Ubuntu Как я могу сказать «apt-get update» для загрузки только одного файла за раз? как получить последний файл в каждом каталоге VPN: сценарий в /etc/ppp/ip-up.d/ не выполняется автоматически при подключении PPTP Неспособность остановить / перезагрузить / выключить

Печать содержимого между двумя строками, которые содержат escape-символы (Linux / Bash)

Я пытаюсь написать скрипт, который ищет мой сервер во многих файлах .app и выводит содержимое между двумя строками – только выводя то, что происходит между двумя строками. Я могу сделать это с AWK и GREP, однако, термины, которые мне нужны для поиска, содержат escape-символы, так что это не работает.

Вот выдержка из файла .dat:

             

Мне нужно найти все данные между “List Variable name =” lookups “‘и” / Variable “и больше ничего … частью проблемы являются escape-символы, но также есть и другие записи в файлах .dat, которые я не хочу захватывать, но они содержат мое первоначальное значение поиска плюс некоторые дополнительные данные … например, сверху “List Variable name =” lookups_for_data “” .. Я не хочу их.

Я пробовал несколько вариантов awk и sed, но я думаю, что проблема в побеге персонажей. Любая помощь будет оценена! Спасибо за вашу помощь!!

По звуку этого вы просто хотите найти весь контент в файлах, который находится между этими двумя строками маркера:

  ... ...  

Для этого вы можете использовать эту команду sed :

 $ sed '//,/<\/Variable>/!d;//d' file.dat        

Это печатает все линии между ними, но пропускает 2 линии маркера.

Как это устроено

Вышеприведенный запрос ищет строку, соответствующую вашему начальному шаблону, за которой следуют все строки, пока он не встретит 2-ю соответствующую строку, <\/Variable> . Для строк между ними sed не удалит их !d Для всех остальных строк d в !d удалит их. 2-й //d удаляет линии маркера.

Если вы хотите выполнить вышеизложенное, а также распечатать строки маркеров, вы можете изменить приведенную выше команду sed на следующую:

 $ sed '//,/<\/Variable>/!d' file.dat