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