linux - 将文本放在行首的括号内

标签 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

我在文档中进行了搜索,但没有找到任何相关内容。

谁能告诉我应该在哪里搜索?

干杯。

最佳答案

您可以使用 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/

相关文章:

java - iPhone 和 Android 网络

python - AWS elastic beanstalk 上的 tensorflow GPU - 调用 "python"+ "sudo"时出现 tf 导入错误(libcublas.so.9.0 错误)

bash - 来自反引号的多字参数(命令替换)

linux - GNU/Linux 命令行中的并行处理

ios - Cocos2d v2.x,无法安装模板。权限被拒绝。我在做傻事吗?

linux - systemd 未从 ExecStart 启动服务

linux - 找不到意外的运算符(Bash 错误)

Bash:如何像输入文件一样命名 gs 输出文件,但使用不同的文件扩展名?

linux - 将多个目录压缩到一个 zip 文件中

linux - Bash脚本在多台服务器上执行命令