【问题标题】:sed replace space character at the 8th position from selected textsed 替换所选文本第 8 位的空格字符
【发布时间】:2023-03-30 09:07:01
【问题描述】:

我在我们公司的 dhcp 服务器的配置文件中添加了一长串主机。

条目如下所示:

host s1 { hardware ethernet b4:e1:0f:06:cb:83; fixed-address 192.168.10.43; }
host s2 { hardware ethernet b4:e1:0f:06:cb:90; fixed-address 192.168.10.64; }
host s3 { hardware ethernet b4:e1:0f:06:cb:9d; fixed-address 192.168.10.44; }
host s4 { hardware ethernet b4:e1:0f:06:cb:aa; fixed-address 192.168.10.65; }
host s5 { hardware ethernet b4:e1:0f:06:cb:b7; fixed-address 192.168.10.41; }
host s6 { hardware ethernet b4:e1:0f:06:cb:c4; fixed-address 192.168.10.35; }
host s7 { hardware ethernet b4:e1:0f:06:cb:d1; fixed-address 192.168.10.36; }
host s8 { hardware ethernet b4:e1:0f:06:cb:de; fixed-address 192.168.10.67; }
host s9 { hardware ethernet b4:e1:0f:06:cb:eb; fixed-address 192.168.10.72; }

我正在使用 vim 编辑文件。如何用 .domain.com 之类的内容替换第 8 位的空格字符? (我指的是 s1,s2 等之后的空格字符

我用 sed 尝试了不同的配置和模式,但由于某种原因我无法让它工作。

另一种方法是将空格 + { 替换为我想要的,但这不是我正在寻找的解决方案。

问候,

【问题讨论】:

  • sed -i 's/hardware/dom.com.hardware/g' file1
  • 您已将 vim 添加为标签。我可以为 vim 回答吗?
  • 我猜你可以......我真的不知道这是怎么回事......

标签: linux bash vim sed


【解决方案1】:

你可以用这个sed

sed 's/host [^ ]*/&.domain.com/g' file

【讨论】:

  • 可以改为sed 's/ /.domain.com/2' file ..(如果需要,在 com 后添加一个空格)
  • 我已经尝试过你的解决方案,最后想出了:s/host [^]*/&.domain.com/g
【解决方案2】:

(这是一个 Vim 答案)

您可以将第 7 列之后的第一个空格替换为:

:%s/\%>7c /.domain.com

但是你的台词不会很漂亮:

host s1.domain.com{ hardware ethernet b4:e1:0f:06:cb:83; fixed-address 192.168.10.43; }

相反,您可以单独保留该空间:

:%s/\%8c/.domain.com

并获得这个:

host s1.domain.com { hardware ethernet b4:e1:0f:06:cb:83; fixed-address 192.168.10.43; }

或者你可以用一个简单的宏来做到这一点:

:%normal! 2f i.domain.com<CR>

【讨论】:

    【解决方案3】:

    使用 sed,基于字符数:

    sed 's/\(.\{7\}\) /\1domain.com/' file
    

    就地编辑文件,请添加-i 选项:

    sed -i 's/\(.\{7\}\) /\1domain.com/' file
    

    【讨论】:

      【解决方案4】:

      用 Vim 将.domain.com 添加到每行的第二个单词:

      :%s/\v^(\s*\w+){2}\zs/.domain.com/
      

      sed:

      sed -r 's/ +/.domain.com /2' file.txt
      

      awk:

      awk '{ $2 = $2 ".domain.com" } 1' file.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        • 2012-12-07
        • 2014-11-27
        • 2021-03-16
        • 1970-01-01
        相关资源
        最近更新 更多