Извлечение чисел между двумя шаблонами строк

Вот один -вкладыш, который может не совсем соответствовать критериям, но подходит достаточно близко для большинства целей.

gawk '/FOO/{p=1} {if(p) print} /^$/{p=0}' infile.txt

Первое правило устанавливает p=1, если видит FOO. Второе правило печатает текущую строку, если p не равно нулю. Третье правило устанавливает p=0, если уже напечатанная строка ()пуста. Поменяйте местами второе и третье правила, если вы не хотите, чтобы выводился пустой разделитель строки.

Это вариант, который нумерует и разделяет совпадения, если есть несколько экземпляров FOO, не разделенных пустыми строками

gawk '/FOO/{p=1; n++; print "\n" n} /^$/{p=0} //{if (p) print $0 }' infile.txt
1
08.07.2020, 13:35
4 ответа

Это не то, что вы думаете, это работает только случайно:

[^years]+

Это означает соответствие любому символу , кроме y, e, a, rи sхотя бы один раз.

Кроме того, вместо Смотреть -за утверждением я бы использовал держать -вне . Его преимущество в том, что он может иметь переменную длину, тогда вы можете легко сопоставить как Age, так и Height.

(Age|Height)=\K

Затем вместо отрицательного совпадения используйте положительное соответствие, сопоставляя только числа:

grep -Po '(Age|Height)=\K\d+'

--

$ echo "Age=22 and Height=6" | grep -Po '(Age|Height)=\K\d+'
22
6
7
18.03.2021, 23:21

I have a file with following type of expression in every line "Age=22 years and Height=6 feet"

С sed, имеющим опцию -E.

sed -E 's/[^[:digit:]]+/ /g;s/^ //' <<< "Age=22 years and Height=6 feet"

Или, если это файл, укажите sedна него.

sed -E 's/[^[:digit:]]+/ /g;s/^ //' file.txt

Чтобы добавить к рисунку Возраст и Рост .

sed -E 's/^Age=([[:digit:]][^ ]*).*Height=([[:digit:]][^ ]*).*/\1 \2/' file.txt
1
18.03.2021, 23:21
$ echo 'Age=22 years and Height=6 feet' | awk -F'[= ]' '{print $2, $6}'
22 6
2
18.03.2021, 23:21

Пробовал с помощью метода «Ниже»

Команда ниже заменит все, кроме цифр

echo "Age=22 years and Height=6 feet"| sed -e "s/[^0-9]/ /g" -re "s/\s+/ /g"

Питон

a="Age=22 years and Height=6 feet"
import re
k=re.compile(r'[^0-9]')
l=re.sub(k," ",a)
t=l.strip().split(' ')
print t[0],t[-1]

выход

22 6

-1
18.03.2021, 23:21

Теги

Похожие вопросы