Используйте команду sed с переменными

Почему awk? для этого? grep -EPo '[^\s]+\.h[\s]' /path/to/src/*.cpp >> Makefile должно помочь.

1
22.04.2017, 01:20
2 ответа
sed: -e expression #1, char 2: unterminated `s' command

В сообщении об ошибке говорится, что ошибка происходит на втором символе, что кажется любопытным. Я могу воспроизвести это, поставив новую строку в начале первой переменной:

$ a=$'\nfoo'
$ b='bar'
$ sed "s@$a@$b@"
sed: -e expression #1, char 2: unterminated `s' command

Новая строка без символов завершает команду sed. Если поставить новую строку позже в a, то, конечно, ошибка возникнет на более позднем символе.

Вы вывели обе переменные ранее в сценарии, но они не были заключены в кавычки, поэтому любые пробелы в них должны были быть удалены, а пробелы в середине отобразились бы как одиночные пробелы.

Проверьте, что на самом деле содержат ваши переменные, с помощью чего-то вроде этого:

printf ">%s<\n" "$to_replace"
printf "%q\n" "$to_replace"

Последнее - это функция Bash, которая отображает строку в кавычках таким образом, что Bash принимает ее в качестве ввода. set -x также покажет, что поступает в командную строку sed, но вам нужно будет заметить литеральную новую строку из его вывода.

Итак, если одна ведущая новая строка - это все, что есть, вы можете удалить ее в начале сценария:

to_replace=${pc#*,}
to_replace=${to_replace#$'\n'}

(Можно объединить их в один, но отдельные шаги работают, даже если новой строки там нет)

.
3
28.01.2020, 00:57

Попробуйте это

sed -i -e "s@$to_replace@$replace_with@g" "$entry"

где

  • -i означает замену "на месте", Если вы не используете -i, замена будет на стандартном выводе.
-3
28.01.2020, 00:57

Теги

Похожие вопросы