单个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])
?删除括号中的内容也会冲掉第一个括号中的子字符串。换句话说,这种情况下的问题需求是自相矛盾的。