我想匹配任何字符和除逗号之外的任何空格与正则表达式。只匹配除逗号以外的任何字符给我:
[^,]*
但我也希望在字符串中的任何位置匹配任何空格字符,制表符,空格,换行符等。
编辑:
这是在vim中使用sed:%s / foo / bar / gc。
我想找到从func开始直到逗号,在下面的示例中:
func("bla bla bla"
"asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")
我
答案 0 :(得分:0)
要使用multiline
在SED
中使用RegEx
,您应该查看here。
修改强>
在SED
命令中,使用NewLine有点不同。 SED
命令支持三种模式来管理多行操作N
,P
和D
。要查看其工作原理,请参阅this(使用多行)解释。这里讨论了这三个操作。
我的猜测是N
运算符是此处缺少的考虑范围。添加N
运算符将允许在字符串中感知\n
。
来自here的示例:
有时候人们希望在sed脚本中使用新的行字符。 嗯,这里有一些微妙的问题。如果想要搜索一个 新行,必须使用“\ n”。以下是您搜索的示例 一个短语,并删除该短语后的新行字符 - 将两条线连接在一起。
(echo a; echo x; echo y)| sed'/ x $ / {N s:x \ n:x:}'
生成
一个xy
但是,如果要插入新行,请不要使用“\ n” - 而是 插入一个文字换行符:
(echo a; echo x; echo y)| sed's:x:X \:'
产生
一个X
ý
答案 1 :(得分:0)
所以基本上你试图匹配多行的模式。
这是在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
命令,该命令匹配第一个逗号对(多行)模式空间之前的所有字符,并进行更换。