2013-05-03 2 views
0

Я проверяю, если текущая строка прочитана AWK содержит несколько строк, для которых я использую:нужно искать строки, содержащие определенную строку шаблона

if (/.*abc.*lab.*/) 
{ 
} 

, но если строка в строке означает, например,

[abc ls:lab=123 ....].. 

, тогда строка выполняется правильно, но если строка содержит, например,

[abc ls:key=xyz xyz. ls:lab=123 ...].. 

то линия не ищется, даже если он соответствует .*abc.*lab.*

Может кто-то пожалуйста, поправьте меня, если я делаю какую-то ошибку при поиске?

+0

Не могли бы вы попытаться уточнить, что вы имеете в виду «если строка в строке является, например,». . ", то строка правильно выполняется, но если строка содержит, например," .. ", тогда строка не будет искать, даже если она соответствует. * abc.lab."? – maaachine

+0

Какая оболочка это? Он не соответствует никакому синтаксису оболочки, который я когда-либо видел ... – michaelb958

+0

Что такое разделитель полей ввода ('FS'), который вы указали? – devnull

ответ

1

Вы должны быть в состоянии использовать:

awk '/abc.*lab/ { print $0 }' 

Узор сопоставляется $0, всей линии. Тем не менее, то, что вы написали должны работать, если записать в виде:

awk '{if (/.*abc.*lab.*/) print $0}' 

или с более простым регулярным выражением:

awk '{if (/abc.*lab/) print $0}' 

Если вы не имеете if внутри { ... }, то у вас есть синтаксический проблемы с awk.

Учитывая файл данных, как это:

[abc ls:lab=123 ....].. 
then the string is searched correctly, but if the line contains e.g. 

[abc ls:key=xyz xyz. ls:lab=123 ...].. 

сценарии выше всех продуктов:

[abc ls:lab=123 ....].. 
[abc ls:key=xyz xyz. ls:lab=123 ...].. 
Смежные вопросы