Маючи справу з потенційно несанітованими входами, мені подобається бачити, що вся робота «прописана» рядком за візуальним оглядом, перш ніж я запускаю її (особливо коли це щось руйнівне, як чистка поштової скриньки людей).
Тож, що я роблю, це генерувати список параметрів (тобто імена користувачів), подавати його у файл у одному записі на рядок, як це:
johndoe
jamessmith
janebrown
Потім я відкриваю список у vim
і обробляю його з пошуковими і замінюючими виразами, поки не отримаю список повних команд, які потрібно виконати, як-от так:
/bin/rm -fr /home/johndoe
/bin/rm -fr /home/jamessmith
Таким чином, якщо ваш регулярний вираз буде неповним, ви побачите, у якій команді виникнуть потенційні проблеми (тобто /bin/rm -fr johnnyo connor
). Таким чином ви можете скасувати регекс і спробувати його ще раз з більш надійною його версією. Ім’я Манглінг для цього горезвісне, тому що важко піклуватися про всі крайні випадки, такі як Ван Гог, О'Коннорс, Сент-Клер, Сміт-Вессон.
Це set hlsearch
є корисним для цього vim
, оскільки це виділить усі матчі, тому ви зможете легко помітити, якщо він не збігається, або збіг ненавмисно.
Після того, як ваш регулярний вираз є ідеальним, і він охоплює всі випадки, які ви можете перевірити / придумати, тоді я зазвичай перетворюю його на вираз sed, щоб він міг бути повністю автоматизований для іншого запуску.
У випадках, коли кількість рядків введення заважає вам зробити візуальний огляд, я настійно рекомендую повторити команду на екран (а ще краще - журнал) перед його виконанням, тож якщо він помилиться, ви точно знаєте, яка команда викликала це провалитися. Потім ви можете повернутися до оригінального регулярного виразу та ще раз налаштувати.
printf "foo bar\nbaz bat" | xargs echo whee
дасть урожайwhee foo bar baz bat
. Можливо, додайте-L
або-n
параметри?