gpt4 book ai didi

linux - 如何转义 sed 输入文件

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:22 27 4
gpt4 key购买 nike

我正在尝试制作一个简单的 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/

我想我需要转义该文件,但我找不到任何地方可以做到这一点。

最佳答案

发生根目录扩展是因为 '/************' 被 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com