Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将文本放在行开始处的括号内_Linux_Shell_Unix_Sed_Command - Fatal编程技术网

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