名前に基づいて行を並べ替える方法は次のとおりです。私はステップを分解して、中間出力を見ることができます。
> cat data.txt
a:2:{s:4:"name";s:8:"John Doe";s:3:"age";s:2:"20";}
a:2:{s:4:"name";s:8:"Jane Doe";s:3:"age";s:2:"15";}
a:2:{s:4:"name";s:12:"Steven Tyler";s:3:"age";s:2:"35";}
a:2:{s:4:"name";s:12:"Jim Morrison";s:3:"age";s:2:"25";}
a:2:{s:4:"name";s:13:"Apple Paltrow";s:3:"age";s:2:"75";}
a:2:{s:4:"name";s:12:"Drew Nickels";s:3:"age";s:2:"34";}
a:2:{s:4:"name";s:11:"Jason Proop";s:3:"age";s:2:"36";}
ここで、 'sed'コマンドを使用して、正規表現を使用して名前を抽出します。私たちは、その後、出力名、タブは、その後、元の行は、私たちはそれを並べ替えることができます。
> cat data.txt | sed -rn 's/[^"]+"name";s:[0-9]+:"([^"]+)".*/\1\t\0/p'
John Doe a:2:{s:4:"name";s:8:"John Doe";s:3:"age";s:2:"20";}
Jane Doe a:2:{s:4:"name";s:8:"Jane Doe";s:3:"age";s:2:"15";}
Steven Tyler a:2:{s:4:"name";s:12:"Steven Tyler";s:3:"age";s:2:"35";}
Jim Morrison a:2:{s:4:"name";s:12:"Jim Morrison";s:3:"age";s:2:"25";}
Apple Paltrow a:2:{s:4:"name";s:13:"Apple Paltrow";s:3:"age";s:2:"75";}
Drew Nickels a:2:{s:4:"name";s:12:"Drew Nickels";s:3:"age";s:2:"34";}
Jason Proop a:2:{s:4:"name";s:11:"Jason Proop";s:3:"age";s:2:"36";}
このsedコマンドは、行の最初の引用符で囲まれた文字列であることを「名前」値が必要です。おそらくこの手順をPHPスクリプトで実装し、ネイティブPHP関数を使用してデータを逆シリアル化する必要があると保証できない場合は、 'name'が存在しないか、または行に最初に引用された文字列でない場合、その行はスキップされます。 sedの詳細については、オンラインで多くのリソースがあります。私達はちょうどを取り除く必要があり、
> cat data.txt | sed -rn 's/[^"]+"name";s:[0-9]+:"([^"]+)".*/\1\t\0/p' | sort
Apple Paltrow a:2:{s:4:"name";s:13:"Apple Paltrow";s:3:"age";s:2:"75";}
Drew Nickels a:2:{s:4:"name";s:12:"Drew Nickels";s:3:"age";s:2:"34";}
Jane Doe a:2:{s:4:"name";s:8:"Jane Doe";s:3:"age";s:2:"15";}
Jason Proop a:2:{s:4:"name";s:11:"Jason Proop";s:3:"age";s:2:"36";}
Jim Morrison a:2:{s:4:"name";s:12:"Jim Morrison";s:3:"age";s:2:"25";}
John Doe a:2:{s:4:"name";s:8:"John Doe";s:3:"age";s:2:"20";}
Steven Tyler a:2:{s:4:"name";s:12:"Steven Tyler";s:3:"age";s:2:"35";}
今、私たちが持っている私たちの行がソート:
今の名前は行の最初であることを、我々は、並べ替え、それらをソートするコマンド通常のUNIXを使用することができます線の前に平らな名前:
> cat data.txt | sed -rn 's/[^"]+"name";s:[0-9]+:"([^"]+)".*/\1\t\0/p' | sort | cut -f2
a:2:{s:4:"name";s:13:"Apple Paltrow";s:3:"age";s:2:"75";}
a:2:{s:4:"name";s:12:"Drew Nickels";s:3:"age";s:2:"34";}
a:2:{s:4:"name";s:8:"Jane Doe";s:3:"age";s:2:"15";}
a:2:{s:4:"name";s:11:"Jason Proop";s:3:"age";s:2:"36";}
a:2:{s:4:"name";s:12:"Jim Morrison";s:3:"age";s:2:"25";}
a:2:{s:4:"name";s:8:"John Doe";s:3:"age";s:2:"20";}
a:2:{s:4:"name";s:12:"Steven Tyler";s:3:"age";s:2:"35";}
お楽しみください!
私は、コマンドラインからこれをすべて実行しようとしていることを明記する必要があります。 – tambler
最初の行に希望の結果が表示されますか? – Pafjo
理想的には、ファイルの内容と同じ出力を受信したいと思います...パターンにマッチし、2番目のワイルドカードの内容に従ってソートされた行だけです。 – tambler