2011-06-05 21 views
1

Я использую sed для создания файлов из файлов шаблонов. Я не могу понять, используя man sed, почему он не меняет все согласованные строки.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 при замене строки заменяется только первая.

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

ответ

5

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

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

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

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

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

Смежные вопросы