В документации четко написано, что если вы получаете сообщения от локальной системы, то в качестве ip вы получите 127.0.0.1.
Здесь,http://www.rsyslog.com/doc/master/configuration/properties.html
попробуйте отправить его из какой-нибудь другой системы. Меня устраивает.
Или же, если IP для вас не важен и вы просто хотите отличить хост, используйте свойство %hostname%.
Использование gsub()
в awk
для последнего;
-поля с разделителями:
$ awk -F ';' 'BEGIN { OFS=FS } { gsub(" ", ",", $NF); print }' file
some name;another thing; random;,value,value,value,value,value
Используя sed
и предполагая, что мы хотим заменить все пробелы после последнего ;
запятыми:
$ sed 'h;s/.*;//;y/ /,/;x;s/;[^;]*$//;G;s/\n/;/' file
some name;another thing; random;,value,value,value,value,value
Аннотированный sed
скрипт:
h ; # Duplicate line into hold space
s/.*;// ; # Delete up to the last ;
y/ /,/ ; # Change space to comma in remaining data
x ; # Swap pattern and hold spaces
s/;[^;]*$// ; # Delete from the last ;
G ; # Append hold space delimited by newline
s/\n/;/ ; # Replace the embedded newline with ;
; # (implicit print)
«Пространство хранения» представляет собой отдельный буфер хранения, который sed
предоставляет. «Пространство шаблонов» — это буфер, в который данные считываются из ввода и к которому могут быть применены модификации.
СGNU sed
$ s='some name;another thing; random; value value value value value'
$ echo "$s" | sed -E ':a s/^(.*random;.*) /\1,/; ta'
some name;another thing; random;,value,value,value,value,value
:a
табличкаa
s/^(.*random;.*) /\1,/
здесь (.*random;.*)
будет захватывать все до random;
в строке ввода и столько символов, сколько необходимо, пока после этого не будет пробела, затем в разделе замены используйте обратную ссылку, чтобы сохранить захваченную строку и заменить пробел символом запятой random;
, это сохранит пробелы только до первого вхождения ta
перейти к метке a
, если предыдущая замена прошла успешно Перл спешит на помощь!
perl -F';' -ne '$F[3] =~ s/ /,/g; print join ";", @F'
-n
считывает ввод построчно и обрабатывает каждую строку -F
разбивает каждую строку заданного регулярного выражения на массив @F =~
привязывает подстановку только к четвертому элементу массива @F, т.е. после элемента после "random" $ perl -MText::CSV_XS=csv -e'csv(in=>csv(in=>"file",sep=>";",allow_whitespace=>1),sep=>";",quote_space=>0);'
some name;another thing;random;value value value value value
$ perl -pe 's/ (?=[^;]*$)/,/g' file