![](/img/trans.png)
[英]regex: How to replace curly brackets in the html content except the curly brackets inside style tags?
[英]How to delete block of code inside curly brackets?
我有一個包含一些代碼塊的文件:
dimensions{
dim1{
//foo
}
dim2{
//bar
}
}
如何刪除整個“尺寸”塊,包括里面的所有內容? 考慮到我不知道里面有多少塊,但我確定我們有相同數量的左大括號和右大括號? 提前致謝。
使用 vim 使用:global
匹配包含dimensions
的任何線都相當簡單:
:[range]g[lobal]/{pattern}/[cmd]
例如:
:g/dimensions/print
命令print
將打印所有匹配的行:
將命令更改為normal!
可以在匹配的行上執行正常模式命令,例如d
刪除或y
ank。
:g/dimensions/normal! ...
命令d
刪除,但需要跟隨它的動作,例如: $
刪除直到換行符,或者在我們的例子中,我們可以使用%
找到匹配的字符對, {
匹配}
, (
匹配)
等。
:g/dimensions/normal! d%
可以從命令行調用 vim 並使用-c
請求它執行命令:
vim -c 'g/dimensions/normal! d%' [inputfile]...
記得保存並關閉以避免 vim 保持打開狀態:
-c 'wq'
由於 vim 可以通過 vimrc 文件配置為需要的,因此可以從環境中禁用它:
-u NONE
全部一起:
vim -u NONE -c 'g/dimensions/normal! d%' -c 'wq' [inputfile]...
如果您可以使用 vim 而不是 sed,則可以利用非交互模式獲利:
vim input.txt -u NONE -c "call search('\\<dimensions{', 'w')" -c "norm maf{%d'a" -c "wq"
請注意,此版本將就地編輯文件。
這個方法很好,因為它會考慮到大括號塊的遞歸嵌套。
但是,這有一些問題:
norm
命令不懂vim就不好理解 使用perl
和遞歸正則表達式:
$ cat input.txt
some text before.
dimensions{
dim1{
//foo
}
dim2{
//bar
}
}
some text after.
$ perl -0777 -pe 's/dimensions(\{(?:(?>[^{}]+)|(?1))*\})\n//' input.txt
some text before.
some text after.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.