Text-Processing
使用 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
並不能解決問題。
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
選項,它也會列印文件名。為了跳過碰巧被命名的損壞的連結和目錄,需要使用 findgrep
選項。-type f``*.js
或者更簡單,完全擺脫 grep (感謝@don_crissti 的建議):
find src/ -type f -name '*.js' -exec awk '/filter\(|map\(/{printf "%-100s%-5s%-100s\n", FILENAME, FNR, $0}' {} +