【问题标题】:replace lines from file that match patterns in another file替换文件中与另一个文件中的模式匹配的行
【发布时间】:2013-06-17 19:00:49
【问题描述】:

我正在写一个脚本,但此刻我的脑海里一片空白。

所以基本上,我有1.txt,它有一堆IP,比如:

1.1.1.1
2.2.2.2
3.3.3.3

我还有另一个文件2.txt,它有这样的内容:

1.1.1.1
2.2.2.2
3.3.3.3 bad ip
4.4.4.4
5.5.5.5

1.txt 中的任何内容都应该在2.txt 中消除,所以在处理之后,2.txt 应该是这样的

4.4.4.4
5.5.5.5

尝试使用脚本绘制空白

while line in `cat 2.txt` 
sed -i 's/"$line"//g' 2.txt

谁能指点一下?

【问题讨论】:

    标签: regex perl sed awk pattern-matching


    【解决方案1】:

    GNU

    sed -r 's#(.*)#/\1/d#' file1 | sed -f - file2
    

    【讨论】:

    • 这很好,但是有什么办法可以消除该行而不是用空行替换它?
    【解决方案2】:

    在这里你可以单独使用grep

    grep -wv -f 1.txt 2.txt
    

    【讨论】:

      【解决方案3】:

      遍历 1.txt 并存储所有值。然后遍历 2.txt 的行,如果任何值与 1.txt 中的任何值匹配,则不要存储这些值。仅存储 2.txt 中与 1.txt 中的任何值都不匹配的值。

      【讨论】:

        【解决方案4】:

        这个 awk 1-liner 应该可以完成这项工作:

        awk 'NR==FNR {a[$1];next} !($1 in a)' {1,2}.txt
        

        【讨论】:

          【解决方案5】:
          awk 'NR==FNR{a[$0]++;next}{for(x in a) if(index($0,x)>0) next}1' file{1,2}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-06-23
            • 1970-01-01
            • 2013-06-23
            • 2021-09-30
            • 2021-03-28
            • 1970-01-01
            • 2011-06-03
            相关资源
            最近更新 更多