sed只替换第一次出现的字符串

时间:2011-06-05 18:31:58

标签: sed

我使用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

Produces(script_test_name):

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

我看到,对于要替换2次字符串的行,只替换第一个字符串。

你能给我一个提示如何解决它吗?

2 个答案:

答案 0 :(得分:5)

s命令仅更改第一次出现,除非您向其添加g(全局)修饰符。

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

答案 1 :(得分:3)

您必须在替换中添加“g”修饰符:

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

(注意模板中的最后一个“g”)。这会指示sed替换该行中的所有匹配文本。