在写之前,我当然读了很多其他类似的案例。示例我使用#!/bin/bash
代替#!/bin/sh
我有一个非常简单的脚本,它从模板文件中读取行,并希望用实际数据替换一些关键字。示例字符串<NAME>
将替换为真实姓名。在示例中,我想用单词Giuseppe
替换它。我尝试了2种解决方案,但它们不起作用。
#!/bin/bash
#read the template and change variable information
while read LINE
do
sed 'LINE/<NAME>/Giuseppe' #error: sed: -e expression #1, char 2: extra characters after command
${LINE/<NAME>/Giuseppe} #error: WORD(*) command not found
done < template_mail.txt
(*) WORD
是第
如果问题太基本,我很抱歉,但我看不到错误,错误信息没有帮助。
EDIT1:
EDIT2:
感谢您的回答我更接近解决方案。我的例子是一个简化的案例,但我想改变其他数据。我想对同一个字符串进行多次替换,但是BASH只允许我进行一次替换。在我使用的所有编程语言中,我能够从字符串中替换,但BASH使我对此非常困难。以下行不起作用:
CUSTOM_MAIL=$(sed 's/<NAME>/Giuseppe/' template_mail.txt) # from file it's ok
CUSTOM_MAIL=$(sed 's/<VALUE>/30/' CUSTOM_MAIL) # from variable doesn't work
我想修改CUSTOM_MAIL几次,以便包含一些真实的信息。
CUSTOM_MAIL=$(sed 's/<VALUE1>/value1/' template_mail.txt)
${CUSTOM_MAIL/'<VALUE2>'/'value2'}
${CUSTOM_MAIL/'<VALUE3>'/'value3'}
${CUSTOM_MAIL/'<VALUE4>'/'value4'}
有什么办法?
答案 0 :(得分:2)
无需手动循环。 sed
命令本身在提供的文件的每一行上运行表达式:
sed 's/<NAME>/Giuseppe/' template_mail.txt > output_file.txt
如果一行上有g
字符串的更多外观,则可能需要<NAME>
修饰符:s/<NAME>/Giuseppe/g