то, что я хочу сделать, это увеличить команду, я уже должен вернуть номера строк, где появляется указанная строка:

grep -r -l -n -w "ePKI" /home/websites/www/* > /home/keywords.txt

Команда выше возвращает имена файлов, такие как

filename_where_keyword_appears_01.txt
filename_where_keyword_appears_02.txt
etc

И то, что я хотел бы сделать, это вернуть номер строки, где строка также появляется в файле, например:

filename_where_keyword_appears_01.txt 12 45 67 89

Может ли кто-нибудь посоветовать мне улучшить мою команду, чтобы сделать что-то подобное?

2 ответа2

1

Вы можете получить результаты, аналогичные желаемым, пропустив -l и используя команду cut следующим образом:

grep -r -n -w "ePKI" /home/websites/www/*|cut -d':' -f 1,2 > /home/keywords.txt

Если вам нужно, чтобы вывод был точно таким, как вы описали, вы можете попробовать с помощью awk:

awk -F, 'FNR==1 {printf "\n%s",FILENAME};/ePKI/ {printf " %d ",NR} END {printf "\n"}' /home/websites/www/*

Объедините это с find для рекурсии:

find /home/websites/www/* -type f -print0 | xargs -0 awk -F, 'FNR==1 {printf "\n%s",FILENAME};/ePKI/ {printf " %d ",NR} END {printf "\n"}'
0

Опция -l подавляет нормальный вывод и печатает только имя файла. Опустите опцию -l и оставьте опцию -n чтобы увидеть имя файла и номера строк. Кроме того, вы увидите соответствующую строку или только соответствующую часть при указании опции -o .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .