将文本放在行首的方括号内

时间:2019-02-24 21:02:32

标签: linux shell unix sed command

我有以下文本字符串:

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 :(得分:0)

您可以使用sed:

sed 's/\(.*\)\(\[[^]]*\] \)/\2\1/' file.in > file.out
  • s/PATTERN/REPLACEMENT/是一个替代,它通过替换替换所有与模式匹配的内容。某些字符在模式中具有特殊含义:
  • .匹配任何字符
  • *的意思是“重复0次或多次”,因此.*可以匹配任意数量的任意字符
  • \(...\)是捕获括号,与它们的内部相匹配的内容将被保存(第一个捕获因子是\1,第二个捕获因子是\2,等等)
  • [...]引入了一个字符类,它匹配方括号内的任何字符
  • ^是字符类中的一个否定词,因此[^]]匹配除]以外的任何字符,而[^]]*匹配除]以外的任意数量的任何字符
  • \[与文字[匹配,与\]相似

因此,第一个[之前的内容存储到\1,从[到第一个]的后续字符存储在\2中,并且这两个部分被\2\1替换,即它们的顺序颠倒了。