如何转义sed的输入文件

时间:2018-11-02 00:39:13

标签: linux bash unix sed zsh

我正在尝试制作一个简单的bash脚本,该脚本使用一个输入文件并用实际值(在这种情况下为日期)替换&date之类的占位符

示例:

text=$(sed -e "s/&file/$FILE/" -e "s/&date/$DATE/" $FILE)
echo $text

问题:

  1. 删除换行符,将所有行混杂在一起。
  2. 放置在文件开头的/******之类的内容更改为/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/

我想我需要对文件进行转义,但是我找不到任何方法。

1 个答案:

答案 0 :(得分:1)

正在发生根目录的扩展,因为Bash将 ***********解释为“ / ***********”(路径名扩展)为“根目录通配符通配符...” ...”

为此,我什至不使用sed,它的regex语法有点不愉快。关于Perl:

"$text"

正如@Gordon Davisson在评论中所说,此处的关键是在将echo用作echo的参数时引用{{1}},因此Bash不会将“ / ***”视为路径并在甚至调用{{1}}之前将其展开。

编辑:这是一个链接:http://wiki.bash-hackers.org/syntax/expansion/globs