Поместите текст в квадратные скобки в начале строки - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть следующая строка текста:

185.244.25.157 [10 Feb @ 12:53:52] "GET login.cgi HTTP/1.1" 400 0

Да, это вредоносный бот, пытающийся скомпрометировать мою систему, но это не главное.

Я хочу, чтобы текст междуквадратные скобки (под этим я подразумеваю те: []) должны быть в начале строки.Это дало бы мне следующий вывод:

[10 Feb @ 12:53:52] 185.244.25.157 "GET login.cgi HTTP/1.1" 400 0

Я искал в документах, но ничего не нашел по этому поводу.

Может кто-нибудь сказать мне, где я должен искать?

Приветствие.

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете использовать sed:

sed 's/\(.*\)\(\[[^]]*\] \)/\2\1/' file.in > file.out
  • s/PATTERN/REPLACEMENT/ - это замена , она заменяет все, что соответствует шаблону, заменой.Некоторые символы имеют специальное значение в шаблоне:
  • . соответствует любому символу
  • * означает «повторяется 0 или более раз», поэтому .* соответствует любому количеству любых символов
  • \(...\) - это скобки захвата, то, что соответствует их внутреннему виду, сохраняется (первый захват переходит к \1, второй к \2 и т. Д.)
  • [...] вводиткласс символов, соответствует любому символу в квадратных скобках
  • ^ является отрицанием внутри класса символов, поэтому [^]] соответствует любому символу, кроме ], а [^]]* соответствует любому числу любых символовно ]
  • \[ соответствует литералу [, аналогично для \]

Итак, то, что предшествует первому [, сохраняется в \1,следующие символы от [ до первого ] сохраняются в \2, и эти две части заменяются на \2\1, т.е. их порядок обратный.

...