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

时间:2017-01-31 13:22:10

标签: 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.*.*.*VARTOREPLACE替换为NEWVAR1
  • 如果ip匹配127.1.*.*VARTOREPLACE替换为NEWVAR2
  • 如果ip匹配127.2.*.*VARTOREPLACE替换为NEWVAR3

我已经尝试了

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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

尝试以下命令 -

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

答案 1 :(得分:0)

尝试这个简单的命令:

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

虽然如果还有很多其他变数我也不会推荐它。 您应该有另一个文件为您执行某种vlookup

答案 2 :(得分:0)

@Eric Cox:尝试一下awk解决方案。

            var match = new BsonDocument
            {
                {
                    "$project",
                    new BsonDocument
                    {
                        {"PartData.Description", 1 }
                    }
                }
            };
            var pipeline = new[] { match };
            var aggregationCursor = parts.Aggregate<Part>(pipeline);
            var query = aggregationCursor
                .ToEnumerable()//needed to perform AsQueryable
                .AsQueryable()//Asking for data elements  
            }  

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