【问题标题】:replace string with variable on file [duplicate]用文件上的变量替换字符串[重复]
【发布时间】:2020-03-22 23:06:18
【问题描述】:

我有几行的文件,例如:

 ) extent size 256 next size 512 lock mode row;
  ) extent size 512 next size 512 lock mode row;
  ) extent size 256 next size 512 lock mode row;
  ) extent size 512 next size 512 lock mode row;
  ) extent size 256 next size 512 lock mode row;
  ) extent size 512 next size 512 lock mode row;
  ) extent size 512000 next size 48 lock mode row;
  ) extent size 512 next size 512 lock mode row;

我想将所有这些行更改为:

) extent size 16 next size 16 lock mode row;

我可以得到一切:

cat file | grep "extent size" 

但我不知道如何更改可变文本

感谢您的帮助,

SP

【问题讨论】:

  • grep 只能提取匹配的行,不能修改。您可以使用标签中提到的sed,请参阅stackoverflow.com/tags/sed/info 以获取入门资源
  • 感谢回复,是的,我在其他脚本上使用过 sed 来替换变量,我的问题是如何替换具有不同值的数字。

标签: string variables sed replace


【解决方案1】:

如果对 awk 解决方案感到满意。试试这个:-

grep "extent size" filename | awk '$4=$7="16"' 

解释

grep "extent size" => Grep the line contain words **"extent size"** 
awk '$4=$7="16"'   => change the value of **column 4 and 7** to 16.

【讨论】:

    【解决方案2】:

    您想将包含extent size 的行上的所有数字块替换为其他数字。

    您可以使用以下sed 解决方案:

    val=16;
    sed "/extent size/{s/[0-9]\{1,\}/$val/g}" file > newfile
    

    详情

    • /extent size/ - 查找包含此文本的行
    • {s/[0-9]\{1,\}/$val/g} - 在找到的行上,将一个或多个数字替换为 val 内容(假设它是一个简单的数字,不需要额外处理)。

    请参阅online sed demo

    【讨论】:

    • 它就像一个魅力,感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2023-03-30
    相关资源
    最近更新 更多