Bash sed:-e表达式1,字符8:未终止的's'命令

Bash sed:-e表达式1,字符8:未终止的's'命令,bash,sed,Bash,Sed,以下代码: for project in $projectlist do echo $project ssh user@server 'awk "/^\[EARTH]/{flag=1; next} /\[PROJECT]/{flag=0} flag" /filepath/'${project}'/file | sed "s/^/'${project}'\;/g" | sed "s/^/test\;/g" | sed "s/\\/\;/g" | sed "s/\;//9g"

以下代码:

for project in $projectlist
do
    echo $project
    ssh user@server 'awk "/^\[EARTH]/{flag=1; next} /\[PROJECT]/{flag=0} flag" /filepath/'${project}'/file |
    sed "s/^/'${project}'\;/g" | sed "s/^/test\;/g" | sed "s/\\/\;/g" | sed "s/\;//9g"' >> "$filepath"/data1.csv;

    ssh user@server 'awk "/\[VALUES]/{flag=1; next} /,0/{flag=0} flag" /filepath/'${project}'/file |
    sed "s/^/'${project}'\;/g" | sed "s/^/test\;/g" | sed "s/\\/\;/g" | sed "s/\"//g"' >> "$filepath"/data2.csv;

done
为每个迭代提供以下输出:

sed: -e expression #1, char 8: unterminated `s' command
sed: -e expression #1, char 8: unterminated `s' command
我试过多次尝试重新格式化等,但总是遇到这个问题。我已经转义了里面的分号,并且$project变量中没有一个包含斜杠。有什么想法吗?

你的sed s/\\/\\/g是错的。只要做一个简单的动作,你就能看到问题所在

sed "s/\\/\;/g" <<<x
您还将获得一个未终止的's'命令

双引号打开\-转义,这意味着\\被视为一个反斜杠。因此,sed可以看到命令s/\/\/g、 这反过来意味着它只能看到两条斜线而不是一条


我不知道你想要实现什么,但也就是说,sed s/\\/\\/g在语法上是正确的。

尝试更改sed s/^/'${project}'\/g->sed s/^/${project}/哇,这就解释了!我想用分号替换文本选择中的所有反斜杠。我该怎么做呢?@bullfighter:tr\\\;'所以基本上是交换sed的s/\\\/\/带tr\\';'?将尝试使用tr\\\\';'同时删除单个\警告