我有以下文本字符串:
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/REPLACMENT/
是一个替换,它用替换替换与模式匹配的所有内容。某些字符在模式中具有特殊含义:.
匹配任何字符*
表示“重复 0 次或多次”,因此.*
匹配任意数量的任意字符\(...\)
是捕获括号,保存与其内部匹配的内容(第一个捕获到\1
,第二个捕获到\2
,依此类推)[...]
引入一个字符类,它匹配方括号内的任何字符^
是字符类中的否定,因此[^]]
匹配除]
之外的任何字符,而[^]]*
匹配除]
之外的任意数量的任何字符\[
与文字[
匹配,与\]
类似
因此,第一个[
之前的字符存储在\1
中,从[
到第一个]
的后续字符存储在\2
中,这两部分被\2\1
替换,即它们的顺序颠倒了。
关于linux - 将文本放在行首的括号内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54856518/