2014-01-10 3 views
-1

У меня есть файл, содержащий:экстракт индексов с SED

toto.tata0.titi=any1 
toto.tata1.titi=any2 
toto.tata2.titi=any2 
toto.tata3.titi=any1 
toto.tata4.titi=any1 
toto.tata5.titi=any2 

Я хочу, чтобы извлечь все tata ссылки, которые равны any2

Как я могу это сделать только с одной командой (sed, например) ?

я могу сделать это с 2-мя командами grep и cut

$ cat file | grep "toto\.[^.]\+\.titi=any2" | cut -d. -f2 
tata1 
tata2 
tata5 
+0

Просьба уточнить. Является ли ** = any2 ** достаточным совпадением, или вам нужно смотреть на другие части линии? Всегда ли существует ** tata ** термин, или он может отсутствовать? Если отсутствует, нет совпадения, даже если есть «any2»? Сколько из подходящей строки вы хотите вернуть? –

ответ

2

С вы можете найти любую строку, которая заканчивается any2 и использовать две замены команды, первый, чтобы удалить все символы до первого ., а второй, чтобы удалить из следующего . до конца:

sed -ne '/any2$/ { s/^[^.]*\.//; s/\..*$//; p }' infile 

Это дает:

tata1 
tata2 
tata5 
3

Вы можете использовать AWK:

awk -F'=' '$2=="any2"{print $1}' file 
toto.tata1.titi 
toto.tata2.titi 
toto.tata5.titi 

ИЛИ если вы просто хотите, среднюю часть затем:

awk -F'[.=]+' '$NF=="any2"{print $2}' fff 
tata1 
tata2 
tata5 
Смежные вопросы