Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Regex 删除字符串直到右括号的第一个匹配项_Regex_Sed_Replace_Posix - Fatal编程技术网

Regex 删除字符串直到右括号的第一个匹配项

Regex 删除字符串直到右括号的第一个匹配项,regex,sed,replace,posix,Regex,Sed,Replace,Posix,我有一个文件,看起来像: [-------------]7个来自RouteGenSetup的测试 [运行]RouteGenSetup.AcceptStatTest [2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable::LogTATRow(Add):1.1->2.1,循环:llllllll,模式:TR [2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable::LogTATRow(Add)

我有一个文件,看起来像:

[-------------]7个来自RouteGenSetup的测试
[运行]RouteGenSetup.AcceptStatTest
[2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable::LogTATRow(Add):1.1->2.1,循环:llllllll,模式:TR
[2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable::LogTATRow(Add):1.1->5.1,循环:llllllll,模式:TR
[2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable::LogTATRow(Add):6.1->7.1,循环:llllllll,模式:TR
[确定]路由设置接受测试(0毫秒)
[运行]RouteGenSetup.BlockLinksTest
[2021-03-08 22:55:53.937][error]TimeSlotAssignmentTable::LogTATRow(Add):1.1->2.1,轮数:LLLLLL,模式:TR
[2021-03-08 22:55:53.938][error]TimeSlotAssignmentTable::LogTATRow(添加):1.1->5.1,循环:llllllll,模式:TR
我想去掉日期和时间戳(例如,
[2021-03-08 22:55:53.937]
)。为此,我尝试使用以下
sed
命令:

sed-i'/^\[2021-/s/^.*\]\//1'output.txt
但是,时间戳右侧的
[info]
[error]
括号也会被删除:

[-------------]7个来自RouteGenSetup的测试
[运行]RouteGenSetup.AcceptStatTest
TimeSlotAssignmentTable::LogTATRow(Add):1.1->2.1,轮数:LLLLLL,模式:TR
TimeSlotAssignmentTable::LogTATRow(添加):1.1->5.1,轮数:LLLLLL,模式:TR
TimeSlotAssignmentTable::LogTATRow(Add):6.1->7.1,轮数:LLLLLL,模式:TR
[确定]路由设置接受测试(0毫秒)
[运行]RouteGenSetup.BlockLinksTest
TimeSlotAssignmentTable::LogTATRow(Add):1.1->2.1,轮数:LLLLLL,模式:TR
TimeSlotAssignmentTable::LogTATRow(添加):1.1->5.1,轮数:LLLLLL,模式:TR
当我尝试

sed-i'/^\[2021/s/[^\]]*/'output.txt
删除第一个打开的括号而不是第一个关闭的括号:

[-------------]7个来自RouteGenSetup的测试
[运行]RouteGenSetup.AcceptStatTest
2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable::LogTATRow(添加):1.1->2.1,循环:LLLLLL,模式:TR
2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable:LogTATRow(Add):1.1->5.1,循环:LLLLLL,模式:TR
2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable::LogTATRow(添加):6.1->7.1,循环:LLLLLL,模式:TR
[确定]路由设置接受测试(0毫秒)
[运行]RouteGenSetup.BlockLinksTest
2021-03-08 22:55:53.937][error]TimeSlotAssignmentTable::LogTATRow(Add):1.1->2.1,循环:llllllll,模式:TR
2021-03-08 22:55:53.938][error]TimeSlotAssignmentTable::LogTATRow(Add):1.1->5.1,循环:llllllll,模式:TR
努力

sed-i'/^\[2021/s/^[^\]*\]/'output.txt
不产生变化。我不知道如何解决这个问题。我在类似的帖子中尝试了一些推荐的东西,但没有成功

注意:这不是的重复,因为这里的问题不同:如果行以某个前缀开头,则仅匹配字符串开头和第一个
]
+空格之间的子字符串

没有解释如何获取以特殊字符开头的行,然后从开始到第一个
]
+空格匹配字符串。

您可以使用

sed-i'/^\[2021-/s/^[^]]*]/'文件
这里,

  • /^\[2021-/
    -查找以
    [2021-
    开头的行
  • s/^[^]]*]/
    -匹配从字符串开头到第一个
    ]
    的任何零个或多个字符,然后是一个空格,并删除这些匹配项(因为RHS为空)
注意
[^]]
是一个反括号表达式,它匹配除
]
以外的任何字符。由于括号表达式不支持正则表达式转义序列,
]
需要是括号表达式中的第一个字符,因此不能在括号表达式中使用
\]
anwhere

见:

s='[-------------]路由安装程序中的7个测试
[运行]RouteGenSetup.AcceptStatTest
[2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable::LogTATRow(Add):1.1->2.1,循环:llllllll,模式:TR
[2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable::LogTATRow(Add):1.1->5.1,循环:llllllll,模式:TR
[2021-03-08 22:55:53.937][info]TimeSlotAssignmentTable::LogTATRow(Add):6.1->7.1,循环:llllllll,模式:TR
[确定]路由设置接受测试(0毫秒)
[运行]RouteGenSetup.BlockLinksTest
[2021-03-08 22:55:53.937][error]TimeSlotAssignmentTable::LogTATRow(Add):1.1->2.1,轮数:LLLLLL,模式:TR
[2021-03-08 22:55:53.938][error]TimeSlotAssignmentTable::LogTATRow(Add):1.1->5.1,轮数:LLLLLL,模式:TR'
sed'/^\[2021-/s/^[^]]*]/'5.1,轮数:LLLLLL,模式:TR
[信息]TimeSlotAssignmentTable::LogTATRow(添加):6.1->7.1,循环:LLLLLL,模式:TR
[确定]路由设置接受测试(0毫秒)
[运行]RouteGenSetup.BlockLinksTest
[错误]TimeSlotAssignmentTable::LogTATRow(添加):1.1->2.1,轮数:LLLLLL,模式:TR
[错误]TimeSlotAssignmentTable::LogTATRow(添加):1.1->5.1,轮数:LLLLLL,模式:TR
您可以使用

sed-i'/^\[2021-/s/^[^]]*]/'文件
这里,

  • /^\[2021-/
    -查找以
    [2021-
    开头的行
  • s/^[^]]*]/
    -匹配从字符串开头到第一个
    ]
    的任何零个或多个字符,然后是一个空格,并删除这些匹配项(因为RHS为空)
注意
[^]]
是一个反括号表达式,它匹配除
]
以外的任何字符。由于括号表达式不支持正则表达式转义序列,
]
需要是括号表达式中的第一个字符,因此不能在括号表达式中使用
\]
anwhere

见:

s='[-------------]路由安装程序中的7个测试
[运行]RouteGenSetup.AcceptStatTest
[2021-03-08 22:55:53.937][info]