LINUX.ORG.RU

Переменная внутри regexp

 


0

1
set RE {(^[\s\t\w\d\./{}$-:]+)(subject /usr/sbin/sendmail[\s\t\w\d\./{$-:]+}\n)(^[\s\t\w\d\./{}$-:]+$)}
regexp -nocase -all -line -- $RE $data data1 allup subj alldown

Так работает. А как

subject /usr/sbin/sendmail
заменить переменной?

Если RE обернуть в кавычки, то regexp не срабатывает, т.е. $subj уже не определяется.

Можно так:

set RE {(^[\s\t\w\d\./{}$-:]+)($subj[\s\t\w\d\./{$-:]+}\n)(^[\s\t\w\d\./{}$-:]+$)}
set v "subject /usr/sbin/sendmail"
regexp -nocase -all -line -- [regsub {\$subj} $RE $v] $data data1 allup subj alldown

Я бы еще [\s\t\w\d\./{}$-:] в переменную вынес, три раза же повторяется. Кстати, \t входит в \s, \d входит в \w.

moroz
()

Как раз для этого существует команда subst:

set v {subject /usr/sbin/sendmail}
set RE {(^[\s\t\w\d\./{}$-:]+)($v[\s\t\w\d\./{$-:]+}\n)(^[\s\t\w\d\./{}$-:]+$)}
regexp -nocase -all -line -- [subst -nobackslashes -nocommands $RE] $data data1 allup subj alldown
Xenius ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.