【问题标题】:Find line containing string and replace another string with new string查找包含字符串的行并用新字符串替换另一个字符串
【发布时间】:2017-06-16 22:56:59
【问题描述】:

我有一个包含多行的文件,其中包含 IP 地址和之后的变量.....

例子

server 127.0.0.1:80    VARTOREPLACE
server 127.1.0.1:80    VARTOREPLACE
server 127.2.0.1:80    VARTOREPLACE

我该如何扫描文件并匹配一个 ip 模式,然后将该行中匹配的 var 设置为特定的字符串.....示例

  • 如果 ip 匹配 127.*.*.*VARTOREPLACE 替换为 NEWVAR1
  • 如果 ip 匹配 127.1.*.*VARTOREPLACE 替换为 NEWVAR2
  • 如果 ip 匹配 127.2.*.*VARTOREPLACE 替换为 NEWVAR3

我试过了

sed -i '/:127.0 /s/VARTOREPLACE/NEWVAR1/' file

任何帮助将不胜感激。

【问题讨论】:

  • sed -i '/:127.0 /s/VARTOREPLACE/NEWVAR1/' 文件
  • @EricCox 试试sed '/127.0/s/VARTOREPLACE/NEWVAR1/; /127.1/s/VARTOREPLACE/NEWVAR2/; /127.2/s/VARTOREPLACE/NEWVAR3/' file
  • 127.1.*.*127.*.*.* 的一个子集——我假设您想要更具体的替换(如果适用)?

标签: string bash awk replace sed


【解决方案1】:

试试这个简单的命令:

sed -i -e '/127.0/s/VARTOREPLACE/NEWVAR1/' file -e '/127.1/s/VARTOREPLACE/NEWVAR2/' file

虽然如果有很多其他变量我不会推荐它。 你应该有另一个文件为你做某种 vlookup

【讨论】:

    【解决方案2】:

    @Eric Cox:也试试 awk 解决方案。

    awk '$2 ~ /127.1.[0-9]+.[0-9]+/{$NF="NEWVAR2";print;next} $2 ~ /127.2.[0-9]+.[0-9]+/{$NF="NEWVAR3";print;next} $2 ~ /127.[0-9]+.[0-9]+.[0-9]+/{$NF="NEWVAR1";print;next}1'  Input_file
    

    检查字段 2nd 是否等于您在帖子中提供的任何范围(将 * 更改为 [0-9] 因为 * 也可能包含字符等),然后如果条件对于 $2 为 TRUE,则更改值为“NEWVAR1”等的 $NF(last field) 然后打印新格式化的行并放置下一条语句以跳过所有进一步的语句。最后提到 1 打印行,如果没有条件匹配,那么它将简单地打印行。

    【讨论】:

      【解决方案3】:

      试试下面的命令 -

      sed '/127.0.0/s/VARTOREPLACE/NEWVAR1/g;/127.1.0/s/VARTOREPLACE/NEWVAR2/g;/127.2.0/s/VARTOREPLACE/NEWVAR3/g'
      server 127.0.0.1:80    NEWVAR1
      server 127.1.0.1:80    NEWVAR2
      server 127.2.0.1:80    NEWVAR3
      

      【讨论】:

        猜你喜欢
        • 2018-01-14
        • 2021-07-10
        • 2019-05-14
        • 1970-01-01
        • 2017-06-25
        • 1970-01-01
        • 2013-12-03
        • 2012-09-11
        • 2021-07-19
        相关资源
        最近更新 更多