探す

探す

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 は、一致式に一致する行の過去の部分を赤で表示します。

関連情報