grep pipe with sed - PullRequest
       3

grep pipe with sed

3 голосов
/ 23 декабря 2010

Это моя команда bash

grep -rl "System.out.print" Project1/ | 
    xargs -I{} grep -H -n "System.out.print" {} |
    cut -f-2 -d: |
    sed "s/\(.*\):\(.*\)/filename is \1 and line number is \2/

То, что я пытаюсь сделать здесь, я пытаюсь перебрать подпапки и проверить, какие файлы содержат «System.out.print» (используя grep) используя 2-й grep, пытаясь получить имена файлов и номера строк используя команду sed, я отображаю их на консоли. отсюда я хочу удалить "System.out.print" с "XXXXX", как я могу передать команду sed к этому? пожалуйста, помогите мне спасибо

Ответы [ 2 ]

10 голосов
/ 23 декабря 2010

GNU sed имеет возможность изменять файлы на месте:

find Project1/ -type f | xargs sed -i 's/System\.out\.print/XXXXX/g'

Кстати, ваш сценарий может быть записан как:

grep -rsn 'root' /etc/ |
    awk -F: '{ print "filename is", $1, "and line number is", $2 }'
0 голосов
/ 02 июня 2012

Я просто опираюсь на ответ хмеля, который мне показался более полезным, чем find -exec.У меня search_text разбросано по всему компьютеру, в журналах, файлах конфигурации и т. Д., Но я не хотел искать (или особенно изменять) что-либо в / dev, / sys, / proc и т.на.Одно примечание, прочитайте man xargs;ему не нравятся имена файлов с пробелами.

grep -HriIl --exclude-dir=dev --exclude-dir=proc --exclude-dir=sys search_text / | xargs sed -i 's/search_text/replace_text/g'
...