sedコマンドは私が望むものを返しません

sedコマンドは私が望むものを返しません

私のドキュメントdoc.lstは、次の数字と文字で構成されています。 01 ABC、「ABC」部分のみ使用します。これを試しましたが、私のresult.lstの数が含まれています。

    sed -n -e '/[A-Z][A-Z][A-Z]/p' < doc.lst > result.lst

この番号をどのように削除しますか?

ベストアンサー1

sed -n -e '/[A-Z][A-Z][A-Z]/p'

この正規表現に一致する行を印刷します。

希望する場所は次のとおりです。

sed -n 's/.*\([[:upper:]]\{3\}\).*/\1/p'

\1つまり、任意の文字シーケンス(できるだけ多く)、3つの大文字(キャプチャを含む)、その後にキャプチャされた文字で構成された任意の文字シーケンスを置き換え、一致する場合に\(...\)印刷します。その代替結果(pコマンドのフラグ)s

1行に1セット(最も右側のセット)のみが印刷されます。

すべて印刷するには:

tr -cs '[:upper:]' '[\n*]' | grep -Ex '.{3}'

(一部のtr実装ではマルチバイト文字を正しく処理できません。)

アイデアは、大文字と小文字の相補的な順序を改行tr文字として解釈し、 の出力にすべての大文字の順序が含まれるようにすることです。これにより、興味のある人のために電子行為を行うことができます。scuppertrxgrep

次のように入力すると、次のようにFOO BAR02 ABCDEF印刷されます。

FOO
BAR

以前のソリューションではが印刷されますが、DEFGNUがある場合はgrepそのオプションを使用できます-o

grep -Eo '[[:upper:]]{3}'

これにより、次のものが印刷されます。

FOO
BAR
ABC
DEF

おすすめ記事