2015-12-05 3 views
0

У меня проблема с sed. Я хочу заменить весь конкретный номер строки для нескольких строк в многократных документах.Команда Unterminated `s 'с устранением неполадок sed

Эта команда Баш 1 конкретной линии в 1 конкретного документа:

BNAME=$(basename $FILE .pdb) 
psfgen1="pdb ./sedpdb/${BNAME}.pdb/" 
sed -i '8s/'.*'/'${psfgen1}'/' ./psfgen.inp 

И я получаю эту ошибку: СЭД: -e выражение # 1, символ 60: команда незакрытых `S'

Кто-нибудь знает, как решить эту проблему? Благодаря!

ответ

1

Я вижу две вещи неправильно:

  1. Есть слэша в строке, которую вы пытаетесь использовать в SED команды. Они будут интерпретироваться как часть команды, поэтому вы должны использовать другой разделитель.
  2. * не упорядочен, так что будет glob-расширена оболочкой именами всех файлов в каталоге.

Надежность использования переменных оболочки в строковых подстановках нетривиальна, но может быть выполнена с использованием одного из подходов, показанных в ответах на this question.

В вашем случае, это выглядит, как вы, вероятно, можете уйти с использованием другого символа в качестве разделителя, например @:

sed -i "[email protected]*@${psfgen1}@" ./psfgen.inp 
+0

Спасибо! Ты мой герой! Оно живое! – Grego

Смежные вопросы