#bash #shell #sed
#bash #оболочка #sed
Вопрос:
Я пытаюсь использовать sed
в bash script следующим образом:
#!/bin/bash
for i in `seq 1 10`;
do
j=$(($i-1))
OLD="-option_something something/string1_${j}.txt"
NEW="-option_somehting something/string1_${i}.txt"
sed -e "s/$OLD/$NEW/g" file_to_edit.txt
# sed -e "s/$OLD/$NEW/g" file_to_edit.txt > file_to_edit.txt.tmp amp;amp; mv file_to_edit.txt.tmp file_to_edit.txt
done
Но я продолжаю получать следующую ошибку:
sed: -e expression #1, char 71: unknown option to
s»
Я также попробовал прокомментированную строку, но она тоже не работает.
Он отлично работает в командной строке. Я не знаю, в чем проблема в скрипте.
Есть предложения? Спасибо.
Ответ №1:
У вас есть a /
в значении OLD
и NEW
, который является тем же символом, который вы используете в качестве разделителя в вашем sed
выражении. Таким образом, конечное выражение в конечном итоге выглядит как:
sed -e "s/-option_something something/string1_${j}.txt/-option_somehting something/string1_${i}.txt/g"
Ты видишь все /
, что там есть? Рассмотрим вместо:
sed -e "s|$OLD|$NEW|g" file_to_edit.txt
Вы можете использовать любой символ в качестве разделителя для s
команды sed.
Комментарии:
1. Кроме того, я должен использовать
-i
вместо-e
, поскольку мой файл не редактировался и не сохранялся, а просто отображался в консоли и исходный файл оставался нетронутым.