如何使用sed命令使用正则表达式过滤文件?

谁能告诉我这两个命令有什么作用?

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

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

我找到了这个例子,我无法弄清楚运行代码时提供的结果。

0
投票
sed -i 's!{[^{]*\;}! !' file.txt
sed -i表示就位,file.txt可能会被更改。 的!....!....!“替换命令,用感叹号拆分。大多数情况下你会看到使用斜杠,但是sed接受不同的字符,由第一个字符定义,在s之后。请注意,感叹号会在shell中产生问题。由于没有斜线,无论是图案还是替换,我都没有理由使用它们。 要匹配的{[^ {] * \;}模式 ''替换最终是一个空白,如果小心转移,但可能是一个标签或时髦的半空间或其他东西。

现在复杂的表达是什么:

{[^ {] * \;}一对包含......的文字大括号 [^ {]一个否定组,否定是第一个字符是'^',所以任何不是开口,大括号,然后是 量词*,表示任意数字,包括0,后跟 退格,这是一种经常使用的掩蔽工具。 和分号。

所以

'{aaaaa;}'应匹配 '{a;}'应匹配 '{;}'应匹配 '{};}'应匹配 '{{;}'不匹配 '{a}'不应该匹配 '{a}'不应该匹配