替换子字符串在bash中不起作用(试过sed,$ {a / b / c /})

时间:2015-07-27 10:01:32

标签: bash sed

在写之前,我当然读了很多其他类似的案例。示例我使用#!/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'}

有什么办法?

1 个答案:

答案 0 :(得分:2)

无需手动循环。 sed命令本身在提供的文件的每一行上运行表达式:

sed 's/<NAME>/Giuseppe/' template_mail.txt > output_file.txt

如果一行上有g字符串的更多外观,则可能需要<NAME>修饰符:s/<NAME>/Giuseppe/g