
正規表現を学び、いくつかの文字を含むファイルを作成しました。 catコマンドを使用してテキストフィルタリング引数を使用してrgrepコマンドにパイプすると、生成される出力は "filename:filtered_text"です。
cat regex.txt | rgrep -E '^a'
regex.txt:a
regex.txt:aa
regex.txt:aaa
regex.txt:aaaa
regex.txt:aaaaa
regex.txt:aaaaaa
file:acpi
file:adduser.conf
file:aliases
file:aliases.db
file:alternatives
file:anacrontab
file:apache2
file:apg.conf
file:apm
file:apparmor
file:apparmor.d
file:apport
file:appstream.conf
file:apt
file:avahi
さらに、フォルダ内の他のファイルを確認し、正規表現と一致する場合は、単一のファイルのみをパイピングしてもそのファイルを表示します。
catに渡されたファイルの内容のみを含む一般的な出力を取得するにはどうすればよいですか?
答え1
-h
withフラグはファイル名を印刷するフラグrgrep
なので、使用する必要があります。rgrep
このフラグはこれを防ぎます。
なぜrgrep
simple grep
and cat
。したがって、まずそれをする必要はありませんcat
。grep PATTERN FILE
十分。 2番目rgrep
の対応するフラグはgrep -r
次のとおりです。-r
grep
-r, --再帰 各ディレクトリの下のすべてのファイルは、シンボリックリンクがコマンドラインにある場合にのみ繰り返し読み込まれます。 ファイルオペランドが指定されていない場合、grepは作業ディレクトリを検索します。 これは -d 再帰オプションと同じです。
簡単な解決策を見つけるには、以下を試してください。
grep '^a' regex.txt
(このモードでそのスイッチを使用する理由は不明です-E
。)
答え2
rgrep
ショートカットです(私のUbuntu 18.04:スクリプト)grep -r
。man grep
:
-r, --recursive Read all files under each directory, recursively,
実際には無視されるようなのでcat
使用するのに何の意味もありません。rgrep