Вот один -вкладыш, который может не совсем соответствовать критериям, но подходит достаточно близко для большинства целей.
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
Это не то, что вы думаете, это работает только случайно:
[^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
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
$ echo 'Age=22 years and Height=6 feet' | awk -F'[= ]' '{print $2, $6}'
22 6
Пробовал с помощью метода «Ниже»
Команда ниже заменит все, кроме цифр
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