【问题标题】:Trouble Using sed to find all string within double quotes麻烦使用 sed 查找双引号内的所有字符串
【发布时间】:2017-12-12 08:56:00
【问题描述】:

所以我有这段代码,我在 .php 网页中使用发布主机名、用户名和密码。然后我可以通过 SSH 连接到我的远程 Pi,并更改 textfile.txt 的文本。我现在需要的是能够将结果显示到我的确认网页中。我无法理解 sed 是否适合使用,但这是我目前所拥有的。

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

Pi1Hostname = "Tester1"

Pi1Username = "示例用户名"

Pi1Password = "示例密码"

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

    $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 行输入。

【问题讨论】:

  • 您可以向 sed 添加多个 -e 参数以在一个命令行中处理多个替换。

标签: php linux ssh sed command-line-interface


【解决方案1】:

在寻找之后,我找到了我想要的答案:

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

【讨论】:

    【解决方案2】:

    在将测试文件添加到程序之前,让 sed 调用对其进行处理。我用我硬编码到另一个程序中的任何命令来做到这一点。

    您的 sed 调用没有引用带有空格的表达式参数。这就是它不起作用的原因。

    我还有一些其他的想法给你。

    您应该非常小心地避免从互联网进入表单输入的任何数据。精心设计的形式可以将命令注入您的外壳(我可能会错过它是如何组合在一起的)。还要确保这是通过 https 运行的。似乎您的有效负载具有任何人都需要查看您的 pi 的任何东西 - 而不是您想要任何未加密的东西。就此而言,它会保护您的 pi 不会将其用户名和密码提交给网络钓鱼 mitm 式攻击。

    此外,为什么要使用 shell?你已经在 php 中了,不是吗?您可以使用全套通用建议编程语言功能,包括带有 pcre 的正则表达式(不仅仅是来自 unix 的糟糕的标准正则表达式,我的朋友没有冒犯 sed)。读取整个文件,在 php 端解析它不是更有意义吗?

    【讨论】:

    • 这是所有测试阶段。最终版本将全部在专用网络上进行保护,只有主 Pi 上的管理员或具有管理员用户权限的专用 IP 方案中的管理员才能访问该网站。我需要它来影响 5 Pi 自动设置一系列设置。
    猜你喜欢
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多