Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash script sed命令在查找匹配“时出现意外EOF”';_Bash_Sed - Fatal编程技术网

bash script sed命令在查找匹配“时出现意外EOF”';

bash script sed命令在查找匹配“时出现意外EOF”';,bash,sed,Bash,Sed,我一直在尝试编写一个Bash脚本,该脚本可以自动完成向MRTG图中添加新设备所需的所有操作。其中一部分要求我编辑一个cfg文件,我已经读过这个文件,可以用sed命令来完成。下面粘贴的行是运行脚本时出现错误的地方,给了我一个“在寻找匹配的``时意外的EOF”错误。上面声明了城镇、塔楼、设备和方向。任何缩小问题范围的帮助都将是巨大的帮助 newpattern="WorkDir: /var/www/html/mrtg/$town/$tower/$equipment$direction" pattern

我一直在尝试编写一个Bash脚本,该脚本可以自动完成向MRTG图中添加新设备所需的所有操作。其中一部分要求我编辑一个cfg文件,我已经读过这个文件,可以用sed命令来完成。下面粘贴的行是运行脚本时出现错误的地方,给了我一个“在寻找匹配的``时意外的EOF”错误。上面声明了城镇、塔楼、设备和方向。任何缩小问题范围的帮助都将是巨大的帮助

newpattern="WorkDir: /var/www/html/mrtg/$town/$tower/$equipment$direction"
pattern="WorkDir: "
sudo sed -e "s/$pattern/$newpattern/" ~/MRTGconfigs/mrtg-BeatriceBSWT2960.cfg

您需要在
s//
命令中使用斜杠以外的东西,因为替换文本中有大量斜杠:

newpattern="WorkDir: /var/www/html/mrtg/$town/$tower/$equipment$direction"
pattern="WorkDir: "
sudo sed -e "s%$pattern%$newpattern%" ~/MRTGconfigs/mrtg-BeatriceBSWT2960.cfg

我使用了
%
符号;您可以使用既不出现在
$pattern
中也不出现在
$newpattern
中的任何其他字符。如果需要,您可以使用控件字符,例如control-a;这也很好。

您需要在
s/
命令中使用斜杠以外的其他字符,因为有斜杠g在替换文本中:

newpattern="WorkDir: /var/www/html/mrtg/$town/$tower/$equipment$direction"
pattern="WorkDir: "
sudo sed -e "s%$pattern%$newpattern%" ~/MRTGconfigs/mrtg-BeatriceBSWT2960.cfg

我改用了
%
符号;您可以使用既不出现在
$pattern
中也不出现在
$newpattern
中的任何其他字符。如果需要,您可以使用控件字符,例如control-a;这也可以正常工作。

意外的EOF错误是由于脚本中前面的引号不匹配造成的。不幸的是,shell无法执行此操作可靠地指出实际问题的位置,因此报告错误的位置是错误变得明显的位置,而不一定是接近实际位置的位置。尝试将整个脚本输入,看看它是否能够发现真正的问题。注意:Jonathan Leffler的回答也是对的,但他指出了一个单独的错误。感谢您的提示。我不知道shellcheck的存在,这一点很好。我刚刚开始涉足shell脚本,这将使学习过程更加轻松!意外的EOF错误是由于脚本前面的引用不匹配造成的。不幸的是,shell无法可靠地判断实际问题在何处,因此它报告错误的位置这是错误变得明显的地方,不一定离实际位置很近。尝试将整个脚本输入,看看它是否能发现真正的问题。注意:Jonathan Leffler的回答也是正确的,但他指出了一个单独的错误。谢谢你的提示。我不知道shellcheck存在,这很好知道。我刚刚开始d在shell脚本中使用缩写,这将使学习过程更加轻松!感谢Jonathan的回复。有问题的错误由Gordon修复(缺少引号)但这也解决了我可能会遇到的另一个问题。@devdacool:我同意这个评估-我在显示的代码中查找问题,而不是在未显示的代码中,但Gordon对您描述的问题(而不是您显示的问题)是正确的.记住。你会看到由于缺少或无关的报价而出现问题。感谢乔纳森的回复。有问题的错误由戈登(缺少报价)修复但这也解决了我可能会遇到的另一个问题。@devdacool:我同意这个评估-我在显示的代码中查找问题,而不是在未显示的代码中,但Gordon对您描述的问题是正确的(而不是您显示的问题)。记住,您会看到由于缺少或无关的引用而出现问题。