Linux 将文本放在行开始处的括号内
我有以下文本字符串:Linux 将文本放在行开始处的括号内,linux,shell,unix,sed,command,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 我查了一下文件,但没有找到任何与之有关的东西 谁能告诉我应该在哪
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
我查了一下文件,但没有找到任何与之有关的东西
谁能告诉我应该在哪里搜索
干杯。您可以使用sed:
sed 's/\(.*\)\(\[[^]]*\] \)/\2\1/' file.in > file.out
s/PATTERN/REPLACEMENT/是一个替换,它用替换来替换与模式匹配的所有内容。某些字符在模式中具有特殊含义:
. 匹配任何字符
*表示重复0次或更多次,因此。*匹配任意数量的任意字符
\…\是捕获括号,保存与其内部匹配的内容。第一个捕获转到\1,第二个转到\2,以此类推。
[…]引入字符类,它匹配方括号内的任何字符
^是字符类中的否定,因此[^]]匹配任何字符,但],而[^]]*匹配任何数量的字符,但]
\[匹配文字[,与\类似]
因此,第一个[之前的内容存储到\1,以下字符从[到第一个]存储在\2中,这两部分被\2\1替换,即它们的顺序颠倒。为什么要进行向下投票?我完全不明白……我不是向下投票人,但一般来说,有关stackoverflow的问题应该包括您尝试的代码,无论有多不充分,以及您对该代码所遇到问题的描述。没有co的问题看起来像是免费咨询的请求,这里的许多专家不喜欢。哦,我理解。我搜索了大约一个小时的答案,但我什么也没找到……下次我会尝试提供更多信息:@John1024