Использование Awk для парсинга отдельных строк

Для нахождения файла, содержащего строку, использовать grep. Если Вы хотите найти, в котором файлы содержат СТРОКУ web/ и все подкаталоги:

grep-R "ПРЕДСТАВЛЯЮТ сеть в виде строки" /

Чтобы отредактировать файл и удалить строки, содержащие строку, туда много опций, но здесь два общих. Так как Вы хотите воздействовать на все строки, это действительно легко :)

Сначала Вы могли использовать grep с -v аргумент, чтобы инвертировать поиск и скрыть подобранные строки от вывода вместо того, чтобы показать им. Для Вашего первого файла давайте сделаем это использование sponge. Это позволит нам читать Ваш файл, фильтровать его, затем запишет его обратно в тот же файл все в одном движении:

grep -v "sdajgeSTRINGdsad" foo.php | sponge foo.php

Для Вашего второго примера мы сделаем то же самое с grep, но если Вы не имеете sponge можно записать это в другой файл, затем положить обратно тот файл к настоящему имени:

grep -v "gdfhu98324STRING" bar.php  > bar.php.cleaned
mv bar.php{.cleaned,}

Второй путь состоял бы в том, чтобы использовать sed с d команда удаления строки. Для Вашего первого примера мы будем использовать оперативное редактирование файла с опцией создать a .bk файл резервной копии:

sed -i.bk '/sdajgeSTRINGdsad/d'  foo.php

В значительной степени то же самое могло быть выполнено путем копирования файла, самостоятельно затем использующего sed, чтобы отфильтровать резервное копирование и перезаписать оригинал:

cp bar.php bar.php.bk
sed '/gdfhu98324STRING/d' bar.php.bk > bar.php

Теперь объединить эти две задачи! Давайте сделаем функцию, таким образом, можно неоднократно делать это с различными строками:

function nuke_string () {
    string="$1"
    path="$2"
    grep -R -l "$string" "$path" | while IFS= read -r file; do
        sed -i.bk "/$string/d" "$file"
    done
}

После того как Вы создаете ту функцию, Вы могли использовать ее как это:

nuke_string "STRING" web/

Любым файлам, содержащим СТРОКУ в сети/, затем удалили бы те строки, и резервная копия будет сделана из исходной версии. Можно создать функцию как это в текущей оболочке, или можно записать это в Ваш .bashrc файл и всегда имеет его доступный.

0
04.04.2012, 20:57
2 ответа
for i in `qacct - o | awk 'NR>2 print {$1}'`
do
  ~/qacct.monthly $i
done
2
28.01.2020, 02:38
  • 1
    Это определенно, как я сделал бы это. –  Chris 05.04.2012, 21:06
for i in `qacct - o | awk 'NR>2 print {$1}'`
do
  ~/qacct.monthly $i
done
2
28.01.2020, 02:38

Теги

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