Имея дело с потенциально неанизированными входами, я хотел бы видеть всю работу, "прописанную", построчно для визуального осмотра, прежде чем запускать ее (особенно когда это что-то разрушительное, например, очистка почтовых ящиков людей).
Поэтому я создаю список параметров (т. Е. Имена пользователей), передаю его в файл по одной записи на строку, например:
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
варианты?