重複したテキストを含む行を削除します。

重複したテキストを含む行を削除します。

1行に2つのパスを含むファイルがあります。同じパスを含む行を2回削除したいです。

私はLinuxとSolarisで作業しています。 sed、awk、またはperlに1行のコードが必要です。

入力ファイルの例:

     /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 つ以上の文字と一致します。バックスラッシュ括弧は、\1「最初のグループと同じテキスト」を意味するグループを作成します。

答え3

これはあなたに役立ちます(GNU sed):

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

関連情報