Условный поиск grep / ack?

#grep #ack

#grep #подтверждение

Вопрос:

Под этим я подразумеваю, что я хочу выполнить поиск «thing1», а затем я хочу выполнить поиск «thing2» на основе положения «thing1». И я хочу отобразить их оба в результате в том порядке, в котором они находятся в coede.

например. Я нахожу «thing1» в строке 100. Затем я хочу выполнить поиск первого «thing2», который встречается перед «thing1». Затем я хочу отобразить оба из них в порядке «thing2», затем «thing1». Я хочу сделать это для каждого экземпляра «thing1», который я нахожу.

Причина этого в том, что я хочу искать определенные строки, которые, как я знаю, будут в списках (python), и я также хочу знать название списков. Итак, я подумал, что могу выполнить поиск строки, а затем также отобразить первый знак «= [«, который встречается перед строкой.

Итак, если файл имеет:

 my_list = [
    'item1',
    'item2',
    'item3',
]

my_other_list = [
    'item4',
    'item5',
    'item3',
]
  

и создайте поиск, который ищет 'item3' , а затем оглядывается назад, чтобы найти предыдущий '= ['

тогда вывод должен быть (не включая номера строк, которые будут помещены grep и ack):

 my_list = [
    'item3',

my_other_list = [
    'item3',
  

Комментарии:

1. можете ли вы добавить образцы данных и требуемые выходные данные?

Ответ №1:

Я думаю, вы этого хотите:

 awk '/=/{thing2=$0} /item3/{print thing2;print $0,"n"}' YourFile
  

Итак, каждый раз, когда вы видите an = , вы запоминаете строку как thing2 . Когда вы видите item3 , что вы печатаете последнюю thing2 , которую вы видели, и текущую строку.

Пример вывода

 my_list = [
    'item3', 

my_other_list = [
    'item3',