linux - 将文本放在行首的括号内
问题描述
我有以下文本字符串:
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
,即它们的顺序是相反的。
推荐阅读
- python - 如何以编程方式选择一个单元格并检索 Tkinter Treeview 中的内容?
- c# - 如何在 c# 中的每个系统上使用点作为小数分隔符
- ubuntu - libcurl.so.4:没有可用的版本信息
- java - RecycleView 中可定制适配器的问题 - Android/Java
- random-forest - 随机森林中的决策树回归器是否有不同的参数?
- c++ - 执行方法后一行出现两次
- reactjs - Redux-Form 使用索引作为字段数组的键,这不是一种反模式吗?
- r - 使用 ggplot 绘制分组数据
- laravel - 使用 Maatwebsite\Excel 3.1 的 Laravel 7 带有 excel 文件的邮件附件
- dart - 在扩展类中找不到扩展方法