テキストファイルがあります。多肢選択式試験です。何百もの質問があり、各質問にはABCDで始まり、1行に1つずつ4つの答えの選択肢があります。
各A.(およびB.など)の後にはスペースが続き、その直後には質問テキストの最初の文字が続く必要があります。このように:
++++++++++++++++++++++++++++++++
This is my question text?
A. Choice 1
B. Choice 2
C. Choice 3
D. Choice 4
++++++++++++++++++++++++++++++++
答えの選択の最初の文字の前に、1つのスペース(別の文字または2つ以上のスペース)以外の文字があるA.で始まるすべての行を探したいと思います。その後、BCとDにも同じことを行います。
/編集する
「OK」行と「Not OK」行を区別したいです。
A.<space><any char not a space> is OK.
例えば
A.ABC not OK.
A.123 not OK.
A. ABC not OK
A. 123 OK.
A. ABC OK.
「異常な」行をすべて探したいです。
/編集終了
答え1
grep -E '^[ABCD]\.([^ ]| )' file
A.
これにより、ファイルから始まる、またはB.
後にスペース以外の文字、または2つのスペースが続くすべての行C.
が抽出されます。D.
式は拡張正規表現(ANDの交互のため|
)なので、-E
withを使用しますgrep
。
答え2
PCRE(Perl Compatible Regular Expressions)をサポートしている場合は、grep
次のことができます。否定的な予測単一のスペースの後にスペース以外の文字が続く場合:
grep -P '^A\.(?! \S)' file
または、A、B、C、Dの4つすべての検索を組み合わせたい場合
grep -P '^[A-D]\.(?! \S)' file
答え3
sed -e '/^[A-D][.][ ][^ ]/d' input-file.txt
これにより、すべての正常な行が削除され、異常な行だけが残り、sedはstdoutとして印刷されます。
TAB 文字を空白として扱わないとします。