繁体   English   中英

麻烦使用sed在双引号中查找所有字符串

[英]Trouble Using sed to find all string within double quotes

因此,我有这段代码,可以在.php网页中使用发布主机名,用户名和密码。 然后,我可以通过SSH进入我的远程Pi,并更改textfile.txt的文本。 我现在需要的是能够将结果显示到我的确认网页中。 我很难理解sed是否正确使用,但这是我到目前为止所掌握的。

这是我正在使用的testfile.txt示例:

Pi1Hostname =“ Tester1”

Pi1Username =“ ExampleUsername”

Pi1Password =“ ExamplePassword”

这是用于在主机名中输入新字符串的工作脚本:

    $ssh1->exec('sed -i \'/Pi1Hostname /s/".*."/"'. $hostnameNew .'\"/\' testfile.txt');

这是我当前试图用来调用pi1Hostname结果的内容:

echo '<p>Company:' . $ssh1->exec('sed -i /Pi1Hostname /\".*.\"/ testfile.txt') .'</p>';

这是我收到的错误消息:

sed: -e expression #1, char 12: unterminated address regex

如果有人对这个问题有任何意见,我将不胜感激。 这是我需要弄清楚的另一件事,以便为网页获取其他19行输入。

看完之后,我找到了我一直在寻找的答案:

cat testfile.txt | grep -oP 'Pi1Hostname = "\K[^"]+

将sed调用添加到程序中之前,请先对其进行处理。 我用我将代码硬编码到另一个程序中的任何命令来执行此操作。

您的sed调用未引用带有空格的expression参数。 这就是为什么它不起作用。

我对您还有其他想法。

您应该非常小心,以免从互联网输入到表单输入中的任何数据。 精心设计的形式可能会将命令注入到您的shell中(我可能会错过它如何组合在一起)。 还要确保它运行在https之上。 看来,您的有效负载中包含任何人都需要查看pi的内容,而不是您不希望加密的内容。 为此,它可以保护您的pi避免将其用户名和密码提交给网络钓鱼mitm样式攻击。

此外,为什么还要使用外壳? 您已经在使用php,不是吗? 您可以使用全套常规提议编程语言功能,包括带pcre的正则表达式(不仅仅是来自unix的简陋标准正则表达式,我的朋友没有冒犯性)。 读取整个文件,在php端解析它是否更有意义?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM