2011-06-05 66 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

您必須將 「G」 修改器添加到替代:

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

(注意:在模板中的最後一個 「G」)。這指示sed替換該行中的所有匹配文本。