![删除包含重复文本的行](https://linux22.com/image/44875/%E5%88%A0%E9%99%A4%E5%8C%85%E5%90%AB%E9%87%8D%E5%A4%8D%E6%96%87%E6%9C%AC%E7%9A%84%E8%A1%8C.png)
我有一个文件,每行包含两个路径。我想删除两次包含相同路径的行。
我在 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