【问题标题】:Running "ip | grep | awk" within a sed replacement在 sed 替换中运行“ip | grep | awk”
【发布时间】:2022-01-03 06:36:44
【问题描述】:

问题集(树莓派操作系统): 我有一个文件example.conf,其中包含一行IPv4addr=XXXXX。我正在尝试将其更改为在命令中生成的 IP

ipTest=$(ip --brief a show | grep eth0 | awk '{ print $3 }')

我想在脚本install.sh 期间自动执行此文件更改,我正在尝试的行是:

IPtest=$(ip --brief a show | grep eth0 | awk '{ print $3 }')
sudo sed -e "/IPv4addr/s/[^=]*$/$IPtest/" example.conf

返回错误:

sed: -e expression #1, char 32: unknown option to `s'

该代码中的简单行有效,例如SimpleTest='Works'

有什么想法吗?我也对其他解决方案持开放态度,但我不是经验丰富的 linux 用户,所以我使用我知道的工具来处理其他问题集。

【问题讨论】:

  • 请看editing-help
  • 考虑使用typeset -p IPtest 的输出更新问题(向我们展示变量中的内容);来自example.conf 的样本也会有所帮助

标签: awk sed raspberry-pi grep ip


【解决方案1】:

$IPtest 包含/ 字符;试试这样的:

IPtest=$(ip --brief a show | grep eth0 | awk '{ print $3 }')
sudo sed -e '/IPv4addr/s@[^=]*$@'"$IPtest"'@' example.conf

【讨论】:

  • 不错的答案。您可以添加,也许,如果没有 -i 选项,sed 命令不会修改 example.conf 文件。
【解决方案2】:

你可以缩短你的变量,让awk同时做grep的工作

IPtest=$(ip --brief a s | awk '/eth0/{print $3}')

使用sed 分组和反向引用

sed -i.bak "s|\([^=]*.\).*|\1$IPtest|" example.conf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2011-01-23
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多