テーブルの検索、grep、および作成

テーブルの検索、grep、および作成

*.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 }'

findmd興味のあるすべてのファイルを見つけて引数として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 ) }' "{}" +

おすすめ記事