1

У меня есть короткий текстовый файл, где я должен сделать вывод данных, используя специальный шаблон. Мой файл:

99 test1
88 test2
10 test3
11 test1
12 test1
13 test2
14 test3
17 test1
18 test4

Один за другим, от test1 к test2 и к test3. Так... Я написал команду:

sed '/test1.*\|test2.*\|test3/!d' filename

И в результате у меня есть результат:

99 test1
88 test2
10 test3
11 test1
12 test1
13 test2
14 test3
17 test1

В этом случае у меня есть строки, которые мне не нужны:

11 test1

17 test1

Эти строки не идут один за другим. Как я могу сделать результат, который мне нужен? Пожалуйста, помогите мне. Спасибо за внимание. Я должен получить этот результат:

99 test1
88 test2
10 test3
12 test1
13 test2
14 test3

1 ответ1

0

Предполагается, что ваши данные находятся в файле с именем test , здесь в одной строке, но без sed:

cat test | tr '\n' '_' | grep -o '[0-9]*\stest1_[0-9]*\stest2_[0-9]*\stest3' | tr '_' '\n'

Что делает эта линия

  1. Изменение содержимого test с нескольких строк на одну строку с помощью tr '\n' '_'
  2. Получите только часть, где test1 , test2 и test3 находятся позади другого с помощью grep -o '[0-9]*\stest1_[0-9]*\stest2_[0-9]*\stest3'
  3. Возврат из одной строки в несколько строк с помощью tr '_' '\n'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .