我想用正则表达式匹配除逗号之外的任何字符和任何空格。只匹配除逗号以外的任何字符给我:
[^,]*
但我也想匹配字符串中任何地方的任何空白字符、制表符、空格、换行符等。
编辑:
这是通过 :%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
. 要了解它是如何工作的,请参阅此(使用多行)说明。这里讨论这三个操作。
我的猜测是N
operator 是这里缺少的考虑区域。添加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
运行命令,该命令将第一个逗号之前的所有字符与(多行)模式空间匹配,并执行替换。