sed的新手,所以试图找出以下问题。
sed -e "s/menuentry \"test.*(/menuentry \"test image ${VERSION} (/" \
-e "s/menuentry \"Lost password change.*(/menuentry \"Lost password change ${VERSION} (/" \
-e "sX/boot/[A-Za-z0-9\.\-\@_]*X/boot/${VERSION}Xg" \
< test.txt
上面的表达,第3部分
-e "sX/boot/[A-Za-z0-9\.\-\@_]*X/boot/${VERSION}Xg" gives an error
sed:-e表达式#3,char 37:`s'的未知选项 如果$ VERSION = FIX,即包含“X”。
处理此问题的更好方法是什么?使用另一个字符作为分隔符,我尝试“:”并且它有效。
答案 0 :(得分:1)
要求救援!
VERSION=FIX
awk -v VERSION="$VERSION" \
'{
sub (/menuentry "test.*\(/ , "menuentry \"test image " VERSION " (" );
sub (/menuentry "Lost password change.*\(/, "menuentry \"Lost password change " VERSION " (");
gsub("/boot/[A-Za-z0-9.@_-]*" , "/boot/" VERSION );
print;
}' \
< foo.txt
将变量替换为sed命令是Not A Good Idea™,正是因为您遇到的原因。当您发现自己想要这样做时,请考虑使用awk。它不那么性感,但它没有这个特殊的问题。