单个sed命令中有多个模式匹配

单个sed命令中有多个模式匹配,sed,Sed,假设我有这根绳子 asdfd ERROR [asdfa:11] (12312) [asdfiel-asdf-asdf] some random text 我想删除括号内的文本((…))和方括号内第二次出现的文本([…]),这样输出就会 asdfd ERROR [asdfa:11] some random text 如何在不使用管道操作符的情况下在单个sed命令中执行此操作?在您提到的特定情况下,无需运行两个命令。你可以这么做 sed 's/(.*] //' yourfile (注意,此处无

假设我有这根绳子

asdfd ERROR [asdfa:11] (12312) [asdfiel-asdf-asdf] some random text
我想删除括号内的文本(
(…)
)和方括号内第二次出现的文本(
[…]
),这样输出就会

asdfd ERROR [asdfa:11] some random text

如何在不使用管道操作符的情况下在单个sed命令中执行此操作?

在您提到的特定情况下,无需运行两个命令。你可以这么做

sed 's/(.*] //' yourfile
(注意,此处无需转义
]
。)显然,这将从行上的第一个左括号删除到它后面的最后一个右括号(如果第二个括号后面有其他
[…]
组,则可以是第二个括号以外的括号)

另一种更准确的方法是

sed 's/([^)]*) *\([^[]*\) *\[[^]]*\] /\1/' yourfile

([^]*])
匹配第一个
(…)
组时,
\([^[]*\)
匹配并捕获以下零个或多个非
[
,并且
\[^]*\]
匹配其后的第一个
[…]
组。(两个
*
和最后一个
试图去掉
后面和
[
前面的所有空格,并且可以根据需要进行调整。)

在您提到的特定情况下,无需运行两个命令。您可以简单地执行此操作

sed 's/(.*] //' yourfile
(注意,此处无需转义
]
。)显然,这将从行上的第一个左括号删除到它后面的最后一个右括号(如果第二个括号后面有其他
[…]
组,则可以是第二个括号以外的括号)

另一种更准确的方法是

sed 's/([^)]*) *\([^[]*\) *\[[^]]*\] /\1/' yourfile

([^]*])
匹配第一个
(…)
组时,
\([^[]*\)
匹配并捕获以下零个或多个非
[
,并且
\[^]*\]
匹配其后的第一个
[…]
组。(两个
*
和最后一个
试图去掉
后面和前面的所有空格,如果需要可以调整。)

查看如何使用管道操作符或在多个sed命令中执行此操作?您提供的唯一输入示例太具体了。如果
之间有一些空格该怎么办[
?是否要保存它?我在回答中做了这个假设,但您应该通过提供一些更相关的输入/输出对来提供预期输出的更准确描述。标记为需要详细信息。在您的输入数据中是否可以嵌套圆括号和方括号?如果可以,输入的预期输出是什么比如
出错(错误[asdfa:11])
?删除括号中的内容也会冲掉第一个括号中的子字符串。换句话说,这种情况下的问题要求是自相矛盾的。请参阅如何使用pipe运算符或在多个sed命令中执行此操作?您提供的唯一输入示例太具体了。如果
)和之间有一些空格该怎么办<代码>[
?是否要保存它?我在回答中做了这个假设,但您应该通过提供一些更相关的输入/输出对来提供预期输出的更准确描述。标记为需要详细信息。在您的输入数据中是否可以嵌套圆括号和方括号?如果可以,输入的预期输出是什么像
出错(错误[asdfa:11])
?删除括号中的内容也会冲掉第一个括号中的子字符串。换句话说,这种情况下的问题需求是自相矛盾的。