AsciiDoc ファイル内のすべてのテキストコメントをクリーンアップします。 AsciiDocはMarkdownに似たファイル形式ですが、次のように最初のレベルのタイトルを表すために#
使用します。=
最初のファイル.adoc
= How To Install MySQL 8.0 on Fedora
2番目のファイル.adoc
= Summaries and Notes From Books I've Read
各ファイルに1つの「単一の」最初のレベルヘッダーが含まれており、常に1行目にあることがわかっている= This is a First-Level Heading
場合、私の目標は、これらの最初のgrep
レベルヘッダーのみを使用してすべてのファイルを検索することです。
この grep コマンドは、2 番目のファイルと一致します。
grep -in '^= .*ooks' *.adoc
これは意味があり、私に必要なものです。しかし、私のターミナルは「books」という言葉の前のすべての項目を赤で強調表示し、「I have read」の残りの部分は白く残します。これは普通ですか?
= 本の概要とメモ私は読んだ
答え1
grepソリューション
探す
grep '^=.*rst.*$' *.adoc
どこ
^
行の始まり=
同じ.*
何でも何度でもrst
最初の文字列.*
何でも何度でも$
行末
見つかったファイルと行が一覧表示されます。
first.adoc:= The title of the first file
結果の印刷
grepは一致をトリガーした行の一部を強調表示するため、
grep '^=.*rst' *.adoc
強調される
最初の.adoc:=最初のタイトル文書
行末までの検索を求められないからです。
grep '^=.*rst.*$' *.adoc
強調される
最初の.adoc:= 最初のファイルのタイトル
リクエストが行末まで検索されるからです。
ファイルのみを使用-l
(または--file-with-matches
)
grep -l '^=.*rst' *.adoc
ファイル名をリストせずに行のみをリストするには-h
(または--no-filename
)を使用します。
バラよりman grep
答え2
awk
サポートされているGNUバージョンにアクセスできる場合は、nextfile
次のことが必要です。
awk '{ if ( $0 ~ /fifth/ ) print FILENAME ; nextfile }' *.adoc
答え3
あなたの質問を正しく理解したら、タイトル全体を強調表示したいと思います。
この場合、式の末尾に.*を追加するだけです。 grep は、一致式に一致する行の過去の部分を赤で表示します。