2013-11-13 3 views
2

Рассмотрим следующий Баш скрипт с простым регулярным выражением:Баш скрипт с простым регулярным выражением

for f in "$FILES" 
do 
    echo $f 
    sed -i '/HTTP|RT/d' $f 
done 

Этот скрипт должен прочитать каждый файл в каталоге, указанном FILES и удалите строки с вхождений 'http' или 'RT' Однако , кажется, что часть OR регулярного выражения не работает. То есть, если я просто sed -i '/HTTP/d' $f то он удалит все строки, содержащие HTTP, но я не могу получить его, чтобы удалить как HTTP и RT

  1. Что я должен изменить в своем регулярном выражении, так что линии с HTTP или RT удаляются?

Заранее благодарен!

ответ

2

Два способа сделать это (по крайней мере):

  1. После СЭД понять ваше регулярное выражение:

    sed -E -i '/HTTP|RT/d' $f

  2. Задание каждого маркера отдельно:

    sed -i '/HTTP/d;/RT/d' $f

+0

Я попробовал 'man sed' искать вариант -E. Очевидно, так как это решение сработало, я вижу, что он вызывает 'sed' распознавание моего регулярного выражения, но можете ли вы показать мне, где найти документацию? – CodeKingPlusPlus

+1

'-E' на самом деле является синонимом' -r' (который также работал бы). '-E' находится там для [обратной совместимости BSD] [1], а также того, что' man sed' на моем OSX предложил. [1]: http://blog.dmitryleskov.com/small-hacks/mysterious-gnu-sed-option-e/ –

0

Ну, во-первых, он будет обрабатывать все СЛОВА в переменной FILES.

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

for f in $(find $FILES -maxdepth 1 -type f) 
do 
    echo $f 
    sed -i -e '/HTTP/d' -e '/RT/d' $f 
done 

Вам просто нужно два «-e» варианты СЭД.

1

Перед тем, как сделать что-нибудь, бегите с противоположным и PRINT, что вы планируете УДАЛИТЬ:

sed -n -e '/HTTP/p' -e '/RT/p' $f 

Просто убедитесь, что вы удаляете только то, что вы хотите удалить, прежде чем на самом деле изменения файлов.

«Это не вопрос о том, параноидны вы или нет, но не параноичны ли вы ENOUGH».

+0

hahaha Мне нравится параноидальная цитата. Тем не менее, я уже на один шаг вперед, поскольку у меня есть резервные файлы :) – CodeKingPlusPlus

Смежные вопросы