Форматирование выхода с Printf Pubded In Chargs

awk 'NR == 2 || NR == 3 {l = l RS $0; next}
     NR == 5 {$0 = $0 l}
     {print}'
1
13.11.2018, 20:10
2 ответа
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}' {} +
2
27.01.2020, 23:31

manделает это немного неясным. «Сканирование остановится при первом совпадении» -указывает, что все имена файлов будут напечатаны, но сканирование совпадающего слова остановится при первом совпадении. Страница GNU grep man поясняет это:

-l
--files-with-matches
Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning of each file stops on the first match. (-l is specified by POSIX.)

Вот пример:

$grep -iR Intel * 
2018/jan/cpu.txt:Intel i9 
2018/motherboard.txt:Intel Motherboard 
hardware.txt:Intel Corei7
#the same result as you provided;

$grep -iRl Intel * 
2018/jan/cpu.txt
2018/motherboard.txt
hardware.txt
#the desired result
0
27.01.2020, 23:31

Теги

Похожие вопросы