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第二个问题删除了它在每一行中找到的第一对左大括号,以及它们之间的任何东西,并用一个空格替换所有这些。第一个问题更难准确描述,但它涉及一个分号。你看到的结果有什么混淆之处?