はい

はい

www.URLがまたはで始まる場合は、m.その部分が存在しないか、ソートに関連していないと仮定して、ソートが実行されるようにファイルのURLリスト(URL /行1行)をソートしたいと思います。どんな提案がありますか?

はい

facebook.com###page
fahrrad.de###userlike-popup
m.facebook.com##.cx
www.facebook.com##body
www.fahrrad.de###userlike-footerbar

ソートされたファイルは次のとおりです。

www.facebook.com##body
m.facebook.com##.cx
facebook.com###page
www.fahrrad.de###userlike-footerbar
fahrrad.de###userlike-popup

説明する

  • facebook.comfahrrad.deh前のcよりも優先します。
  • www.facebook.com##bodym.facebook.com##.cxb以前のように.
  • m.facebook.com##.cxfacebook.com###page.以前のように#
  • www.fahrrad.de###userlike-footerbarfahrrad.de###userlike-popupfよりpの前に来る

ベストアンサー1

スキップしたい部分の後にいつでも文字を追加し、そこからソートを開始できます(その後、文字を削除)。

sedそのオプションをサポートしている場合-E(最新バージョンのGNUはsedこれを行い、以前のバージョンではなくこれを実行します-rが、GNU以外の実装では移植性が低下します):

<file sed -E 's/^(www\.|m\.)?/&:/' | sort -t: -k2 | sed 's/://'

awkまたは、以下を使用して同じことを実行できますperl

<file awk '{sub(/^(www\.|m\.)?/, "&:"); print}' | sort -t: -k2 | sed 's/://'
<file perl -pe 's/^(www\.|m\.)?/$&:/' | sort -t: -k2 | sed 's/://'

POSIXを使用しても、sedいつでも次のことができます。

<file sed -e 's/^www\./&:/;t' -e 's/^m\./&:/;t' -e 's/^/:/' |
  sort -t: -k2 | sed 's/://'

または.、Norで始まらない行の先頭にを追加し、最初の部分の後に部分を並べ替えることもできます。www.m..

<file sed -e '/^www\./b' -e '/^m\./!s/^/./' | sort -t. -k2 | sed 's/^\.//'

おすすめ記事