删除包含重复文本的行

删除包含重复文本的行

我有一个文件,每行包含两个路径。我想删除两次包含相同路径的行。

我在 Linux 和 Solaris 上工作。我想要 sed 或 awk 或 perl 中的一行代码。

输入文件示例:

     /usr/lib/libgmp.so.3.3.3 /usr/lib/libgmp.so.3.3.3
     /usr/lib/libxslt.so.1.1.17 /usr/lib/libxslt.so.1.1.17
     /usr/lib/sse2/libgmp.so.3.3.3 /usr/lib/sse2/libgmp.so.3.3.3
     /usr/local/swp-tomcat-6.0/lib/commons-logging-1.1.1.jar /usr/local/swp-tomcat-6.0/lib/commons-logging-1.1.1.jar
     /usr/share/doc/libXrandr-1.1.1 /usr/share/doc/libXrandr-1.1.1
     /usr/share/doc/libxslt-1.1.17 /usr/share/doc/libxslt-1.1.17
     /etc/3.3.3.255 /etc/172.17.211.255
     /etc/1.1.1.255 /etc/172.17.213.255

预期输出:

     /etc/3.3.3.255 /etc/172.17.211.255
     /etc/1.1.1.255 /etc/172.17.213.255

答案1

awk '{ if ($1 != $2 ) print $1" "$2; }' file

只需将文件替换为适当的文件即可。

或者正如@manatwork 在评论中提到的那样,更简单

awk '$1!=$2' file

答案2

您可以在grep的正则表达式中表达重复的文本(这是正则表达式数学概念的扩展)。

grep -v '^ *\([^ ][^ ]*\)  *\1 *$'

[^ ][^ ]*匹配一个或多个非空格字符。反斜杠括号使其成为一个组,\1表示“与第一组相同的文本”。

答案3

这可能对你有用(GNU sed):

sed -r '/(\S+)\s\1/d' file

相关内容