gpt4 book ai didi

regex - 如何使用带有 sed 和 awk 的 find 命令从文件中删除重复的 IP

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:03 25 4
gpt4 key购买 nike

你好,

我正在编写一个脚本,用于从两个文件中删除重复的 IP。例如,

 grep -rw "123.234.567" /home/test/ips/
/home/test/ips/codingte:123.234.567
/home/test/ips/codingt2:123.234.567

好的,IP 在两个不同的文件中,所以我需要从第二个文件中删除 IP。

grep 为我提供了文件路径和 IP 地址。我的想法:使用 awk 将文件路径存储在一个变量中,然后使用 find 转到该文件并使用 sed 删除重复的 IP,所以我将 grep 语句更改为:

 grep -rw "123.234.567" . | awk -F ':' '{print $1}'

返回:

 ./codingte
./codingt2

我最初尝试在 find 命令中使用完整路径名,但这也不起作用

 find -name /var/cpanel/dips/codingte -exec sed '/123.234.567/d' {} \;

所以,我直接在目录下做了一个cd,把find命令改成:

 find -name 'codingt2' -exec sed '/123.234.567/d' {} \;

它运行,但不删除 IP 地址:

 cat codingt2
123.234.567

现在,我知道问题在于 IP 地址中的点。他们需要逃脱,但我不知道该怎么做。我已经读了几个小时关于转义正则表达式的书,但我不确定如何用 sed 做到这一点

如有任何帮助,我们将不胜感激。我只是想更多地了解正则表达式并将它们与其他 Linux 工具(例如 awk 和 find)一起使用。

我还没有写完整的剧本。我试图将它分解成多个部分,然后在脚本中将它们组合在一起。

所以你知道输出应该是什么样的:

 codingte
123.234.567

codingt2

第二个文件只会删除 IP

最佳答案

cat FILE1.txt | while read IP ; do sed -i "/^${IP}$/d" FILE2.txt ; done

该命令执行以下操作:

  • 有两个文件:FILE1.txtFILE2.txt
  • 它将删除 FILE2.txt 行(在您的情况下,IP 地址)在 FILE1.txt
  • 中找到

关于regex - 如何使用带有 sed 和 awk 的 find 命令从文件中删除重复的 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21057394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com