Sed сценария Bash

#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

Я также попробовал прокомментированную строку, но она тоже не работает.

Он отлично работает в командной строке. Я не знаю, в чем проблема в скрипте.

Есть предложения? Спасибо.

Ответ №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 , поскольку мой файл не редактировался и не сохранялся, а просто отображался в консоли и исходный файл оставался нетронутым.