我想用正则表达式匹配除逗号之外的任何字符和任何空格。只匹配除逗号以外的任何字符给我:
[^,]*
但我也想匹配字符串中任何地方的任何空白字符、制表符、空格、换行符等。
编辑:
这是通过 :%s/foo/bar/gc 在 vim 中使用 sed。
我想从 func 开始直到逗号,在以下示例中:
func("bla bla bla"
"asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")
一世
我想用正则表达式匹配除逗号之外的任何字符和任何空格。只匹配除逗号以外的任何字符给我:
[^,]*
但我也想匹配字符串中任何地方的任何空白字符、制表符、空格、换行符等。
编辑:
这是通过 :%s/foo/bar/gc 在 vim 中使用 sed。
我想从 func 开始直到逗号,在以下示例中:
func("bla bla bla"
"asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")
一世
要在使用multiline中SED使用RegEx,您应该看看这里。
编辑:
在SED命令中,使用 NewLine 有点不同。SED命令支持三种模式来管理多行操作N,P以及D. 要了解它是如何工作的,请参阅此(使用多行)说明。这里讨论这三个操作。
我的猜测是Noperator 是这里缺少的考虑区域。添加N运算符将允许\n在字符串中进行感知。
这里的一个例子:
有时希望在 sed 脚本中使用换行符。好吧,这里有一些微妙的问题。如果要搜索新行,则必须使用“\n”。这是一个示例,您搜索一个短语,然后删除该短语之后的换行符 - 将两行连接在一起。
(回声 a;回声 x;回声 y) | sed '/x$/ { N s:x\n:x: }'
这会产生
一个 xy
但是,如果要插入新行,请不要使用 "\n" - 而是插入文字换行符:
(回声 a;回声 x;回声 y) | sed 's:x:X\:'
生成
一个 X
是的
所以基本上你试图在多行上匹配一个模式。
这是一种方法sed(很确定这些在内部不可vim用,而且我不知道如何在内部复制它vim)
sed '
/func/{
:loop
/,/! {N; b loop}
s/[^,]*/func("ok"/
}
' inputfile
假设inputfile包含这些行
func("bla bla bla"
"asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")
输出是
func("ok", "more strings")
func,请输入大括号。:loop是一个名为的标签loop,(这就是/,/!意思)
N)loop标签 ( b loop),找到,然后s运行命令,该命令将第一个逗号之前的所有字符与(多行)模式空间匹配,并执行替换。