Shell 如何使用sed命令过滤带有正则表达式的fil?

Shell 如何使用sed命令过滤带有正则表达式的fil?,shell,unix,sed,Shell,Unix,Sed,谁能告诉我这两个命令的作用吗 sed -i 's!{[^{]*\;}! !' file.txt sed -i 's!{[^{]*{! !' file.txt 我找到了这个例子,但我无法理解运行代码时提供的结果 sed -i 's!{[^{]*\;}! !' file.txt sed-i表示file.txt可能会被修改。 “是的!…!…!”替换命令,用感叹号拆分。大多数情况下,您会看到使用了斜杠,但是sed接受不同的字符,由s后面的第一个字符定义。请注意,感叹号会在shell中产生问题。由于

谁能告诉我这两个命令的作用吗

sed -i 's!{[^{]*\;}! !' file.txt

sed -i 's!{[^{]*{! !' file.txt
我找到了这个例子,但我无法理解运行代码时提供的结果

sed -i 's!{[^{]*\;}! !' file.txt
sed-i表示file.txt可能会被修改。 “是的!…!…!”替换命令,用感叹号拆分。大多数情况下,您会看到使用了斜杠,但是sed接受不同的字符,由s后面的第一个字符定义。请注意,感叹号会在shell中产生问题。由于没有斜杠,无论是在模式中,还是在替换中,我看不出使用它们的理由。 {[^{]*\;}要匹配的模式 “如果小心转移,替换最终是一个空白,但也可能是一个制表符或时髦的半空格或其他东西。 现在复杂的表达是什么:

{[^{]*\}一对文字大括号,包含。。。 [^{]一个否定组,否定的第一个字符是一个“^”,所以任何不是开头的字符,都是大括号,后跟 量词*,表示任何数字,包括0,后跟 backspace,这是一个屏蔽工具,经常使用。 和分号。 所以

“{aaaaa;}”应匹配 “{a;}”应该匹配 “{;}”应该匹配 “{};}”应该匹配 “{;}”不应匹配 “{a}”不应匹配 “{a}”不应匹配
这不是一个合适的问题。参见1 2 3第二个问题删除了它在每一行中找到的第一对左大括号,以及它们之间的任何东西,并用一个空格替换所有这些。第一个问题更难准确描述,但它涉及一个分号。你看到的结果有什么混淆之处?