区切り記号の並べ替え:中かっこと角かっこ

区切り記号の並べ替え:中かっこと角かっこ

このコマンドを使用しています

cat acronyms.tex | sort -t{ -k1

次のように文字列形式でファイルを並べ替えます。

\newacronym{ex}{EX}{Expanded}

最初の中かっこペアの内容に基づいてソートしたいと思います。ただし、一部の行は次のとおりです。

\newacronym[a string]{ex2}{EX2}

私が使用しているコマンドは、2番目の文字列が最初の文字列の前に来るという点で合計と結果を{区別することはできません。[

[とどのように区別できますか{

答え1

何らかの理由でソートする必要がある場合ただ最初の中かっこペアの内容を扱う最も簡単な方法は、おそらく次のものを使用することです。装飾 - 並べ替え - キャンセル装飾モード。使いたいsedそしてcutただし、シェルでこの機能を実装するにはいくつかのオプションがあります。

sed -e 's/^\([^{]*{\([^}]*\)}\)/\2 \1/' < data|sort|cut -d' ' -f2-

このsedコマンドはまですべて終わり最初の校正器のペア中かっこ、スペース、元の文字列の内容が含まれます。いつものように並べ替えることができます。その後、cut最初に追加したフィールドをリセットしました。

これは奇数文字とキーの不均等な長さをうまく処理しますが、空白が問題になり、エスケープも問題に\}なります。必要に応じて別の区切り記号を使用してください。


データが次の場合:

\newacronym{A}{EX}{Expanded}
\newacronym{F}{EX}{Expanded}
\newacronym{D}{EX}{Expanded}
\newacronym{C}{EX}{Expanded}
\newacronym[abc]{B}{EX}{Expanded}
\newacronym{CD}{EX}{Expanded}
\newacronym[def]{E}{EX}{Expanded}

その後、sedコマンドの結果は次のようになります。

A \newacronym{A}{EX}{Expanded}
F \newacronym{F}{EX}{Expanded}
D \newacronym{D}{EX}{Expanded}
C \newacronym{C}{EX}{Expanded}
B \newacronym[abc]{B}{EX}{Expanded}
CD \newacronym{CD}{EX}{Expanded}
E \newacronym[def]{E}{EX}{Expanded}

残りは簡単です。

答え2

を使用すると、行全体がソートキーとして使用-k1されます。sortあなたが望むものではありませんか?

私はあなたがexand ex2(にあるように{...})をキーとして使用したいとします。これを行うには、-k2ソートフィールドとして指定します。

これは、最初の後のすべてを選択して{キーとして使用します。

\newacronym{ex}{EX}{Expanded}
^^^^^^^^^^^ ^^^ ^^^ ^^^^^^^^^
field 1     f2  f3  field 4

\newacronym[a string]{ex2}{EX2}
^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^
field 1               f2   f3

到着ただ行の残りの部分の代わりに2番目のフィールドをキーとして使用するには、を使用します-k2,2

テスト:

$ sort -t '{' -k2,2 file
\newacronym[a string]{ex2}{EX2}
\newacronym{ex}{EX}{Expanded}

行はまだ間違った順序で表示されます。これはex2}、ソートが前にあるためですex}(ASCIIテーブルで}POSIXロケールを使用しています)。2

もう一度お試しください。ただし、今回はUbuntuでロケールを使用して実行します(en_US.UTF-8すべてのglibc Linuxおよびロケールを除くほとんどのロケールで動作します)。CPOSIX

$ LC_COLLATE="en_US.UTF-8" sort -t '{' -k2,2 file
\newacronym{ex}{EX}{Expanded}
\newacronym[a string]{ex2}{EX2}

ロケールによっては、このLC_COLLATE=...ビットを追加することも、追加しないこともあります。


これはsortシェルに依存しないbashユーティリティであり、シェルに関係なく同じ方法で動作します。したがって、これは「bashソート」の問題ではありませんsort

関連情報