查找包含字符串的行并用新字符串替换另一个字符串
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
【讨论】:
以上是关于查找包含字符串的行并用新字符串替换另一个字符串的主要内容,如果未能解决你的问题,请参考以下文章