gpt4 book ai didi

linux - 变量中包含 "#"的 SED

转载 作者:太空狗 更新时间:2023-10-29 12:20:22 25 4
gpt4 key购买 nike

我有一个脚本可以编辑头文件并替换一些文本。

我要替换的文本行是:

#define A MYTEXT

我需要对 MYTEXT 做一些操作,所以我在文件中循环查找字符串并获取值:

if [[ "$line" == *MYTEXT* ]]
then
echo $line
bn=`echo $line| cut -d 'Y' -f 2` #split at the Y value in the string
#operation here and junk here
sed 's/'$line$'/'$texttoreplace'/g' HeaderFile.h > out.header.h
fi
done < HeaderFile.h

这对于普通字符串来说工作正常,但是 sed 正在死于:

#define A MYTEXT
sed: 1: "s/#define": unterminated substitute pattern

当我使用其中没有“#”的文件时它工作正常,它只是那个文件。

关于我可以做些什么来解决这个问题有什么想法吗?

最佳答案

问题

你有一个引用问题。根据您的设置,Bash 会将未加引号的“#”之后的任何内容视为注释。

解决方案

您应该用双引号将您的 sed 表达式括起来,并用大括号将您的 shell 变量与表达式中周围的文本分开。例如:

line='#define A MYTEXT'
texttoreplace='foo'
echo "$line" | sed "s/${line}$/${texttoreplace}/g"

关于linux - 变量中包含 "#"的 SED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11194659/

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