Pull to refresh

Comments 7

Тут можно применить sed, но этой утилитой пользоваться довольно сложно

Ага. А регулярными выражениями конечно легко. Уровни ваших примеров и в sed легко решаются. Что-то вроде:
sed -i 's/01163/01144/g' config.json
Тут можно применить sed <...>. Для решения этой задачи <...> воспользоваться awk.

Вот, я поправил.

Большую часть описанных возможностей предоставляет обычный grep. Такое чувство, что автор оригинала никогда не запускал его.


Использовать sed в качестве замены grep довольно просто. И уж точно проще, чем ставить и изучать новую нестандартную софтинку.


Вероятно, основное достоинство rg это регулярные выражения Rust и более высокая скорость. Автор оригинала это, видимо, не понял, т.к. упомянул вскользь. Далеко не везде это нужно — мало кто гоняет большие объёмы через скрипты, проще написать на Си.


А так интересно, за статью спасибо.

for i in `grep -Rl 'smth' /path`; do sed -i s/'smth'/'another_smth'/g $i; done
Можно без цикла
grep -Rl 'smth' /path | xargs sed -i s/'smth'/'another_smth'/g
Для всего этого уже придумали grep, sed, awk и xargs. Видимо, автор их не осилил.
Единственный плюс (он же и минус) — это регулярки из Rust. Да, они вчетверо быстрее PCRE, но в 15 раз медленнее HyperScan. А так как обычно требуется либо «сложно», либо «быстро», то выбор золотой середины мне видится сомнительным.
Да, они вчетверо быстрее PCRE, но в 15 раз медленнее HyperScan.

ripgrep не совсем корректно сравнивать с PCRE. Главное достоинство собственно регулярных выражений в ripgrep — это то, что скорость обработки гарантированно работает за время, линейно зависящее от размера входных данных. То есть не будет такой ситуации, что регулярка, работающая за секунды на небольших входных данных, занимает пару часов при обработке лишь немного больших данных.


А, ну и ещё ripgrep — кажется, единственный инструмент, который поддерживает Unicode и при этом не платит за это скоростью работы.

Sign up to leave a comment.