我有以下文本字符串:
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
我在文档中进行了搜索,但没有找到任何有关它的信息。
谁能告诉我应该在哪里搜索?
干杯。
答案 0 :(得分:0)
您可以使用sed:
sed 's/\(.*\)\(\[[^]]*\] \)/\2\1/' file.in > file.out
s/PATTERN/REPLACEMENT/
是一个替代,它通过替换替换所有与模式匹配的内容。某些字符在模式中具有特殊含义:.
匹配任何字符*
的意思是“重复0次或多次”,因此.*
可以匹配任意数量的任意字符\(...\)
是捕获括号,与它们的内部相匹配的内容将被保存(第一个捕获因子是\1
,第二个捕获因子是\2
,等等)[...]
引入了一个字符类,它匹配方括号内的任何字符^
是字符类中的一个否定词,因此[^]]
匹配除]
以外的任何字符,而[^]]*
匹配除]
以外的任意数量的任何字符\[
与文字[
匹配,与\]
相似因此,第一个[
之前的内容存储到\1
,从[
到第一个]
的后续字符存储在\2
中,并且这两个部分被\2\1
替换,即它们的顺序颠倒了。