Пакетное удаление нескольких строк в нескольких файлах с помощью sed - PullRequest
2 голосов
/ 05 января 2012

Допустим, я хочу удалить те же строки в куче файлов.У меня есть простой скрипт bash, подобный этому:

st=$1
en=$2
shift 2
for i in $*; do
   echo "sed -i -e '${st},${en}d' $i"
   sed -i -e '${st},${en}d' $i
done

, который я называю так:

[03:18] ./cleanup.sh 2731 3009 trace_X+0.01080_Y+0.00309_Z-0.00000.dat

, и я получаю

sed -i -e '2731,3009d' trace_X+0.01080_Y+0.00309_Z-0.00000.dat
sed: -e expression #1, char 12: unterminated `s' command

Что я делаю неправильно?Я попытался добавить дополнительные кавычки вокруг переменных или имени файла в вызывающем операторе, но не повезло ...

Спасибо за помощь!

1 Ответ

3 голосов
/ 05 января 2012

Вы должны использовать двойные кавычки в вашей фактической команде sed:

sed -i -e "${st},${en}d" $i

В одинарных кавычках нет расширения переменной.

Тот факт, что оно раскрылось в эхо,поскольку строка, которую вы выводите, окружена двойными кавычками.

И если, на самом деле, это только те числа, с которыми вы имеете дело, вы можете даже полностью отбросить кавычки (sed -i -e ${st},${en}d).

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