查找包含字符串的行并用新字符串替换另一个字符串

Posted

技术标签:

【中文标题】查找包含字符串的行并用新字符串替换另一个字符串【英文标题】: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.*.*.* 的一个子集——我假设您想要更具体的替换(如果适用)? 【参考方案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;next1'  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

【讨论】:

以上是关于查找包含字符串的行并用新字符串替换另一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用特定符号 C++ 查找和替换字符串中的所有字符

javascript [JS]检测链接并用另一个字符串替换链接

Jinja2 模板用新格式查找和替换字符串

sed:查找并替换以特定字符串开头的行中的第 n 个字符

怎样在emacs中进行多文件字符串查找/替换

(Visual C#) 在RichTextBox中实现查找特定字符并返回结果的功能