Помогите с пробелами, когда сценарий добавит строку после искавшего шаблона
$ cat test.txt
test server:1
prod server 1
$ cat ./check.sh
#!/bin/bash
#
search=" test server:1"
add=" test server:1000"
echo "starting"
sed -e "/${search}/a${add}" ./test.txt
$ ./check.sh
starting
test server:1
test server:1000
prod server 1
пробелы прежде: тест server:1000 потерян. Как я могу зафиксировать это?
Необходимо выйти из пространства, иначе sed
проигнорирует его потому что /pattern/atext
и /pattern/a text
и /pattern/a text
интерпретируется то же.
Используйте это:
sed -e "/${search}/a${add// /\\ }" ./test.txt
То, что Вы видите, является тонким различием между расширенной командой GNU
a text
Добавление текста после строки. Это - расширение GNU стандарта, который команда - видит ниже для деталей.
в котором руководство отмечает это
Ведущий пробел после команда проигнорирован.
и оригинал и больше портативной формы
a\ text
который не разделяет ведущий пробел. Существует несколько способов получить последнее поведение в "остроте", например.
$ sed "/${search}/a\\${add}" ./test.txt
test server:1
test server:1000
prod server 1
(отметьте \
потребности, которых оставят в двойных кавычках) или
$ sed "/${search}/a"'\'"${add}" ./test.txt
test server:1
test server:1000
prod server 1
или
$ sed -e "/${search}/a\\" -e "${add}" ./test.txt
test server:1
test server:1000
prod server 1
(хотя примечание, что последний полагается на другое расширение GNU, -e
).