我正在尝试制作一个简单的 bash 脚本,它接受输入文件并替换占位符,例如 &date
按实际值(本例中为日期)
示例:
text=$(sed -e "s/&file/$FILE/" -e "s/&date/$DATE/" $FILE)
echo $text
问题:
- 换行符被删除,所有行都混在一起。
- 诸如
/******
之类的东西放置在文件开头的内容更改为/bin /boot etc
(因此路径已解决)。*****/
也将被替换。
示例:
输入:
/**********************************
hello
**********************************/
输出(中间换行以使其可读):
/bin /boot /dev /etc /home /lib /lib64 /mnt
/opt /proc /root /run /sbin /srv /sys /tmp /usr /var hello parent/ parent_neighbor/
我想我需要转义该文件,但我找不到任何地方可以做到这一点。
最佳答案
发生根目录扩展是因为 '/************' 被 Bash 路径名扩展解释为“根目录通配符通配符通配符......”
我什至不会为此使用 sed,它的正则表达式语法有点令人不快。 Perl 怎么样:
text=$(perl -pe 's/&file/'"$FILE"'/g; s/&date/'"$DATE"'/g' $FILE)
echo "$text"
正如 @Gordon Davisson 在评论中所说,这里的关键是在用作 echo
的参数时引用 "$text"
,这样 Bash 就不会将“/***”视为路径,并在调用 echo
之前扩展它。
编辑:这是一个链接:http://wiki.bash-hackers.org/syntax/expansion/globs
关于linux - 如何转义 sed 输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53111252/