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

String 查找包含字符串的行并用新字符串替换另一个字符串,string,bash,awk,replace,sed,String,Bash,Awk,Replace,Sed,我有一个包含多行的文件,其中包含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.*.*.用NEWVAR1 如果ip与127.1.*.*.替换VARTOREPLACE为NEWVAR2 如果ip与127

我有一个包含多行的文件,其中包含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.*.*.
    NEWVAR1
  • 如果ip与
    127.1.*.*.
    替换
    VARTOREPLACE
    NEWVAR2
  • 如果ip与
    127.2.*.*.
    替换
    VARTOREPLACE
    NEWVAR3
我试过了

sed -i '/:127.0 /s/VARTOREPLACE/NEWVAR1/' file
任何帮助都将不胜感激。

请尝试下面的命令-

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
请在下面的命令中尝试-

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

尝试以下简单命令:

sed -i -e '/127.0/s/VARTOREPLACE/NEWVAR1/' file -e '/127.1/s/VARTOREPLACE/NEWVAR2/' file
虽然如果还有很多其他变量,我不推荐使用它。
您应该有另一个文件为您执行某种vlookup操作

尝试以下简单命令:

sed -i -e '/127.0/s/VARTOREPLACE/NEWVAR1/' file -e '/127.1/s/VARTOREPLACE/NEWVAR2/' file
虽然如果还有很多其他变量,我不推荐使用它。
你应该有另一个文件,它为你做了一种vlookup

@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

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

@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

检查第二个字段是否等于您在帖子中提供的任何范围(将带[0-9]的*更改为*也可能包含字符等),然后如果$2的条件为真,则将$NF(最后一个字段)的值更改为“NEWVAR1”etc,然后打印新格式化的行并放入下一条语句以跳过所有其他语句。最后提到1打印行,如果没有匹配的条件,那么它将只打印行。

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