sed только заменяет первое вхождение строки - PullRequest
1 голос
/ 05 июня 2011

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

Если мой файл (template_file.txt) содержит:

#!/bin/sh
#
# /etc/init.d/%SCRIPT_NAME% - Startup script for play %SCRIPT_NAME% engine
#
### BEGIN INIT INFO
[...]
EOF

Использование:

sed -e "s;%SCRIPT_NAME%;script_test_name;" template_file.txt > script_test_name

Производит (script_test_name):

#!/bin/sh
#
# /etc/init.d/script_test_name - Startup script for play %SCRIPT_NAME% engine
#
### BEGIN INIT INFO
[...]
EOF

Я вижу, что для строк, в которых строка заменяется в 2 раза, заменяется только первая.

Можете ли вы дать мне подсказку, как это исправить?

Ответы [ 2 ]

5 голосов
/ 05 июня 2011

Команда s изменяет только первое вхождение, если вы не добавите к нему модификатор g (global).

sed -e "s;%SCRIPT_NAME%;script_test_name;g" template_file.txt > script_test_name
3 голосов
/ 05 июня 2011

Вы должны добавить модификатор "g" к подстановке:

sed -e "s;%SCRIPT_NAME%;script_test_name;g" template_file.txt > script_test_name

(обратите внимание на последнюю букву "g" в шаблоне).Это указывает sed заменить все соответствующие тексты в строке.

...