В настоящий момент это работает на данные с и без ведущего разделителя, но перестанет работать, если какое-либо поле содержит "regex чувствительные" данные. Обходное решение должно заменить точками regex. {Длина поля} для каждого поля... Вот ссылка на такую версию... Это - cludgey, но это не откажет из-за вышеупомянутой проблемы:
awk 'BEGIN { FS = "([ \t]+)|([ \t]*,[ \t]*)" }
{ # Ignore leading delimiter, if present
hasLeadDlm = match($0, "^("FS")")
LeadDlm = substr($0, 1, RLENGTH)
if (hasLeadDlm) { sub("^("FS")", ""); } # delete leading whitespace
sub("^"$1"("FS")"$2"("FS")"$3"("FS")", "") # delete leading fields
match( $0, "^"$1"("FS")"$2"("FS")"$3"("FS")"$4"("FS")"$5)
print substr($0, 1, RLENGTH)
}' <<< \
"a X a X marks the start, ssY marks the end
a X a X marks the start, sY marks the end
a X a X marks the start, Y marks the end
a X a X marks the start ,Y marks the end
a X a X marks the start,sssY marks the end"
Настоятельно не рекомендуется этого делать , если вы не знаете, что делаете.Поскольку у вас в основном хранятся пароли в вашем файле журнала (, это ставит под угрозу несколько очень важных методов безопасности ).
Но сказать, что если вы знаете, что делаете (, нарушая свои стандарты безопасности ), вот способ:
Вы можете сделать это с помощью трюка, упомянутого в , этом сообщении в блоге,
. Вы редактируете строчку в одном из файлов OpenSSH, потом компилируете и используете. Короткая версия, просто запустите следующий скрипт:
OPENSSH=/opt/openssh2
mkdir -p /opt/openssh2/dist/
cd ${OPENSSH}
wget http://zlib.net/zlib-1.2.11.tar.gz
tar xvfz zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=${OPENSSH}/dist/ && make && make install
cd ${OPENSSH}
wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar xvfz openssl-1.0.1e.tar.gz
cd openssl-1.0.1e
./config --prefix=${OPENSSH}/dist/ && make && make install
cd ${OPENSSH}
wget https://ftp.eu.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.2p1.tar.gz
tar xvfz openssh-6.2p1.tar.gz
cd openssh-6.2p1
sed -e 's/struct passwd \* pw = authctxt->pw;/logit("Honey: Username: %s Password: %s", authctxt->user, password);\nstruct passwd \* pw = authctxt->pw;/' -i auth-passwd.c
./configure --prefix=${OPENSSH}/dist/ --with-zlib=${OPENSSH}/dist --with-ssl-dir=${OPENSSH}/dist/ && make && make install
Подробную и интересную версию читайте в блоге.