*.md
私はすべてを探し、${PWD}
grepで始まる行を見つけて、title:
絶対ファイルパス-H
とパターンマッチングの行番号で印刷しようとしています。その後、結果を-n
区切り文字付きのテーブル-s
に出力しようとします。:
find ${PWD} -type f -name "*.md" -exec bash -c 'i="$1"; grep -HnE "^title:" $1; | column -t -s :;' _ {} \;
これはgrepまで機能しましたが、テーブルを作成できませんでした。
そして、@steeldriverさんが提案した修正によれば、結果ごとに1つずつ実行されるようでfind
テーブルが生成されないのでしょうか?
サンプル出力
/Admin/Specification/Specification.md 2 title Specification
/Admin/GraphicCard/index.md 2 title "GraphicCard"
ベストアンサー1
思考が多すぎるかもしれません。結果を表で作成するのではなく、多作の表作成機で結果を表に作成してみてはgrep
いかがでしょうか。awk
find . -type f -name \*.md -print0 | xargs -0 awk 'BEGIN { OFS="\t" } /^title:/ { print FILENAME, FNR, $0 }'
find
md
興味のあるすべてのファイルを見つけて引数としてawk
渡しますxargs
。次に、awk
一致する行にファイル名(フルfind
相対パスを介して渡されます)、ファイルのレコード番号(つまり行番号)が表示されます。あなたの基準とファイルの両方が出力フィールドの区切り文字で定義さOFS
れたタブで区切られます。
出力をより正確に整列させるには、次のようにします。
/^title:/ { printf( "%35s %4d %s\n", FILENAME, FNR, $0 ) }
また、望んでいませんが、find | xargs awk
必要に応じてfind -exec
動作します。
find . -name \*.md -type f -exec awk '/expiry/ { printf( "%30s %4d %s\n", FILENAME, FNR, $0 ) }' "{}" +