注意事項
逆順(reverse order)でなく逆引き順(reverse index)であることに注意。また日本語の「逆引き」は、文字列の先頭と末尾を逆にした並び(reverse index)の意味と、意味から単語を探す(reverse lookup)の意味の両方で使われる。ここではreverse indexの意味で「逆引き」を使う。
背景
uBlacklistでGoogleの検索結果からStack Overflowの機械翻訳サイトを除外している。
ここで、手作業による除外サイトの追加を減らすため、Stack Overflowの機械翻訳サイトの除外用フィルタをuBlacklistの機能で購読することにした。それに伴い、これまで手作業で追加した除外サイトのリストから、購読するリストでカバーされているものを削除することにした。
ただし、手作業で追加したリストの中にはホスト名部分を「*
」で指定しているものもある。そのようなサイトがあった場合に目grepでの抽出・削除を容易にするため、手元のURLリストと購読するリストを合わせて逆引き順(reverse index)でソートしたい(たとえば、ja.wikipedia.orgと*.wikipedia.orgが隣に来るように文字列をソートしたい)。
方法
revで文字列を逆引き順にしてからsortし、再度revで文字列の順を戻す。手元のURLリストをuser.txt、購読するリストをuBlacklist.txtとすると以下のようになる。
cat user.txt uBlacklist.txt | rev | sort | uniq | rev
応用
手元のURLリストをuser.txt、購読するリストをuBlacklist.txtとすると、以下のコマンドで購読するリストでカバーされているURLを削除できる。uniqコマンドで差集合を取る方法についてはuniq コマンドと集合演算を参照。
cat user.txt uBlacklist.txt uBlacklist.txt | rev | sort | uniq -u | rev
注意事項
rev(1)はPOSIXにもSysVににも含まれない。