xargsパイプ入力を使用したPrintf形式の出力

xargsパイプ入力を使用したPrintf形式の出力

私のコードベースで文字列が表示されるかどうかを検索し、ファイル名、行番号、およびコードスライドでフォーマットされた出力を取得したいと思います。出力の最初の行では目的の結果が得られましたが、次の行では目的の形式が失われます。

$ find src/ -name "*.js" | xargs grep --null -E -n 'filter\(|map\(' | xargs -0 printf "%-100s%-5s%-100s" > test.txt

出力は次のとおりです。 (全行を表示するには右にスクロールしてください)

src/components/AppRouterSwitch.js                                                                   15:    return _Routes.map((route, index) => {
src/components/forms/UserEditForm/UserEditForm.js36:    const options = UserTypes.map((type, index) => <option key={index} value={type.type}>{type.name}</option>);
src/components/pages/AdminPage/SolutionManagementEditPage/SolutionManagementEditPage.js119:        templates:state.templates.filter(item=>item.SOLUTIONID ==id)
src/components/pages/AdminPage/SolutionManagementEditPage/SolutionManagementEditPage.js120:            .map(item=>{return{

最初の行は私が望むものと同じです。次のコンテンツには必須形式がありません。 printf形式の文字列を終了しても/n問題は解決しません。

ベストアンサー1

find src/ -type f -name '*.js' -exec grep -Hn -E -- 'filter\(|map\(' {} + |
    awk -F: '{printf "%-100s%-5s%-100s\n", $1, $2, substr($0, length($1) + length($2) + 3)}'

オプションを使用すると、単一のファイルを引数として呼び出す場合でもファイル名を印刷できます-H。壊れたリンクと名前付きディレクトリをスキップするには、検索オプションを使用します。grep-type f*.js

または、より簡単にgrepを完全に削除してください(提案をありがとう@don_crisstiに感謝します)。

find src/ -type f -name '*.js' -exec awk '/filter\(|map\(/{printf "%-100s%-5s%-100s\n", FILENAME, FNR, $0}' {} +

おすすめ記事