В то время как можно теоретически сделать это полностью в sed (так как это полно по Тьюрингу), это не правильный инструмент для задания.
Простой способ состоит в том, чтобы вставить вкладки в sed, затем выполнить последующую обработку их к пробелам. Если можно определить положение всех столбцов, передайте вывод sed по каналу через expand
.
(Используйте литеральный символ табуляции вместо \t
если Ваш sed не поддерживает \t
.)
Если Вы не знаете ширины столбцов заранее, попробуйте BSD column
утилита. Это смотрит на целый входной файл для определения ширины столбцов, которая размещает длину всех строк.
Если Ваш sed сценарий переписывает и закомментированные строки и незакомментированные строки, или если Вы используете column
, Вам будет нужно немного последующей обработки для скоса закомментированных строк шириной маркера комментария.
… | sed '/^#/ s/ //'
Можно использовать awk вместо этого. Это имеет a printf
функция. Как добавленная премия, существует простой способ защитить специальные символы такой как .
или *
в разыскиваемом содержимое столбца.
Просто вынудите это использовать встроенное:
builtin echo foo
Если echo
не встроенное, это перестанет работать.
Аргументы встроенному никогда не будут обнаруживаться ни в ком ps
вывод, потому что встроенной не является отдельная программа со своей собственной командной строкой. Все современные оболочки (кроме некоторых очень упрощенных конфигураций BusyBox), включая все версии удара, имеют echo
встроенный.
Обратите внимание на это, если Вы звоните bash -c "echo $password"
, затем пароль соберется для всех для наблюдения, потому что он встраивается в команду, с которой Вы работаете bash
. Вызов оболочки только для вызова echo
команда бессмысленна, так надо надеяться, Вы не делаете этого.
Нормально помещать пароль в переменную среды, если необходимо передать его другому процессу. В отличие от параметров командной строки, переменные среды не выставляются другим пользователям в соответствии с Linux и большинству других нельдов.
builtin
не POSIX, но поддерживается в большинстве современных оболочек (удар, zsh, большинство реализаций ksh). – Chris Down 06.05.2013, 10:37