Я вызываю команду grep/perl для извлечения подстроки из файла в сценарии tcl. Однако я не могу найти способ избежать $ в Perl-скрипте.
Вот моя команда:
set varA [exec grep ^library $file | perl -pe 's/.*\(\s*"*(.*?)"*\s*\).*/$1/']
tcl сообщит об ошибке no variable '1'
. Я сбежал $
с помощью {$}
согласно некоторым указаниям, однако команда perl просто не работает после {}
escape. Любое предложение?
Заключите весь аргумент в фигурные скобки, чтобы предотвратить вычисление:
set varA [exec grep ^library $file | perl -pe {s/.*\(\s*"*(.*?)"*\s*\).*/$1/}]
Или пропустите exec
и просто сделайте все это в tcl:
proc fetch_file {filename} {
set f [open $filename]
set result ""
while {[gets $f line] >= 0} {
if {[string equal -length 7 library $line]} {
lappend result [regsub {.*\(\s*"*(.*?)"*\s*\).*} $line {\1}]
}
}
close $f
return [join $result \n]
}
set varA [fetch_file $file]
Великолепно, работает как шарм. Спасибо Шону и Доналу за любезное объяснение.
Объяснение: фигурные скобки в Tcl аналогичны одинарным кавычкам в оболочке (за исключением того, что они хорошо вложены и должны начинать слово).