2015-02-17 2 views
1

У меня возникли проблемы с передачей параметра регулярному выражению внутри команды awk. Что, кажется, проблема здесь? Является ли regex читать имя параметра вместо значения? БлагодаряКак передать параметр регулярному выражению внутри команды awk

FILE=*some file here* 
TEST_STRING1=test 


awk -v testString1="$TEST_STRING1" 'BEGIN { 

} 
{ 
##Sample REGEX HERE 
if ($0 ~ "^testString1.* - \[.*\] - .*$") { 
##DO SOMETHING HERE 
      } 
} 
END{} 
' $FILE 
+0

как и любой другой LAN guage, слово внутри строки - это просто слово, даже если оно бывает таким же, как имя некоторой переменной или функции или любого другого символа, используемого в программе. '" ... testString1 .. "' это просто строка, содержащая текст 'testString1', она не имеет отношения к переменной с тем же именем. –

ответ

2

Вы должны использовать AWK конкатенации:

if ($0 ~ "^" testString1 ".* - \[.*\] - .*$") { 

Или сделать подстановку переменной в оболочке - кавычки немного сложнее

awk -v regex="^${TEST_STRING1}"'.* - \[.*\] - .*$' 

Тогда, в awk

if ($0 ~ regex) ... 
Смежные вопросы