Я хотел бы написать bash скрипт для:
, чтобы принять REGEX для соответствия. Найти все файлы в текущем каталоге и, в конце концов, в подкаталогах (если указан -r), содержащих это слово. Печать -n LINES после сопоставленного регулярного выражения. Необязательно: исключить несколько каталогов или файлов по расширениям.
пример:
./dir
|- file_1
|- file_2
|- subDir1
|- file_3
|- node_modules (subDir)
|- bin (subDir)
выполняется
myscript -w 'TODO' -r -d '<list of excluded dir>' -x <list of excluded extensions file>' -l '<lines inside file after where i found word to be printed>
В нем должны быть напечатаны все строки внутри файлов с TODO .
я использую что-то вроде:
if [ "$RECURSIVE" -eq 1 ]; then
grep -rw "./" -A $LINES -e "$WORD" --exclude $dirs
fi
проблема в том, что я не знаю, как передать список каталогов и файлов внутри bash, чтобы исключить grep , Я попытался с помощью регулярного выражения
dirs="(node_modules|bin)"
, но grep не читает его.
Еще одно требование - распечатать данные последней модификации файла
на данный момент, что я получаю, это просто:
./file1_path: line1
./file1_path: line2
...
Я хотел бы получить:
./file_path | last_modification_date | line_string
...
с исключенным расширением dirs и расширением файлов.
Я пытался выполнить это с помощью find + grep, но мне сложно объединить команды. Теперь я застрял на этом:
find . -maxdepth $MAXDEPTH -type f -exec ls -lah {} | gawk '{print "<here the infos to extract (filename data )>"}'\; -exec grep "$WORD" -A 4 {} \;
но это создает проблему в трубопроводе с gawk
, я получаю:
gawk: row com.:1: ./file_1
gawk: row com.:1: ^ syntax error
gawk: row com.:1: ./file_1
gawk: row com.:1: ^ regular expression not complete
И нет вывода для второго -exec
команда:
пока без gawk все работает нормально:
-rwxr-xr-x 1 linux linux 2,4K mar 19 10:30 ./todo_checker <=== THIS LINE
# Following program check search for TODO's in file your working on.
# It is useful when you're a working on a large software and spread
# TODO's over the files.
#
# It check for TODO's and print:
# file_name | file_location | file_last_modification
# n lines after todo
#
# parameters:
я бы хотел сделать предварительный вывод THISLINE