Как определить текстовую область, используя sed и printf в tcl - PullRequest
0 голосов
/ 08 октября 2019

Привет, я пытаюсь добавить определенную текстовую область %-74s, используя sed и printf в tcl-скрипте, который у меня есть, но я не уверен, как добавить информацию printf в строку кода, которую я имею

puts $f "sed -i "s/XXXTLEXXX/\$1/\" /$file";

любая помощь будет принята с благодарностью, я попробовал несколько комбинаций, но все ошибки

1 Ответ

0 голосов
/ 12 октября 2019

Ваша проблема в том, что вам нужно прописать строку с ограниченным количеством подстановок, но эта строка содержит символы $, " и \. Эти специальные символы означают, что использование обычного слова в двойных кавычках в Tcl очень неудобно;Вы можете использовать множество обратных косых черт для цитирования метасимволов TCL, но это ужасно, когда большая часть строки написана на другом языке (shell / sed в вашем случае). Вот лучший вариант с string map и словом в кавычках (без замен):

set str {sed -i "s/XXXTLEXXX/$1/" /%FILE%}
puts $f [string map [list "%FILE%" $file] $str]

Обратите внимание, что вы можете сделать несколько замен в одной string map, и что она делает каждуюзамена везде, где это возможно. Вы также можете использовать многострочный литерал. (%FILE% было выбрано, чтобы быть литералом, который иначе не встречался в строке. Выберите свой собственный, как вам нужно, но ввод имени помогает с удобочитаемостью.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...