Regex 正则表达式:匹配除逗号以外的任何字符(包括空格)
我想匹配任何字符和任何空格,除了逗号和正则表达式。只有匹配除逗号以外的任何字符,我才能得到:Regex 正则表达式:匹配除逗号以外的任何字符(包括空格),regex,string,sed,string-parsing,Regex,String,Sed,String Parsing,我想匹配任何字符和任何空格,除了逗号和正则表达式。只有匹配除逗号以外的任何字符,我才能得到: [^,]* 但是我还想匹配字符串中任何地方的空白字符、制表符、空格、换行符等 编辑: 这是通过:%s/foo/bar/gc在vim中使用sed 我希望在以下示例中找到从func开始直到逗号的位置: func("bla bla bla" "asdfasdfasdfasdfasdfasdf" "asdfasdfasdf", "more strings") I要在SED中使用RegEx处理多行,您应该
[^,]*
但是我还想匹配字符串中任何地方的空白字符、制表符、空格、换行符等
编辑:
这是通过:%s/foo/bar/gc在vim中使用sed
我希望在以下示例中找到从func开始直到逗号的位置:
func("bla bla bla"
"asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")
I要在
SED
中使用RegEx
处理多行
,您应该查看
编辑:
在SED
命令中,使用换行符有点不同SED
命令支持三种模式来管理多行操作N
、P
和D
。要了解其工作原理,请参见(使用多行)解释。这里讨论了这三种操作
我的猜测是N
操作符是这里缺少的考虑领域。添加N
运算符将允许在字符串中感测\N
例如:
偶尔有人希望在sed脚本中使用新行字符。
嗯,这里有一些微妙的问题。如果你想找一个
新行,必须使用“\n”。下面是一个示例,您可以在其中搜索
一个短语,并删除该短语后的新行字符-
将两条线连接在一起
(echo a;echo x;echo y)| sed'/x$/{ns:x\N:x:}'
产生
xy
但是,如果要插入新行,请不要使用“\n”-
插入文字新行字符:
(回声a;回声x;回声y)| sed's:x:x\:'
产生
a X
y
所以基本上你要在多条线上匹配一个模式 在
sed
中有一种方法可以做到这一点(但我很确定这些方法在vim
中不可用,我不知道如何在vim
中复制)
假设inputfile
包含这些行
func("bla bla bla"
"asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")
输出是
func("ok", "more strings")
详细信息:
- 如果行包含
,请输入大括号func
是一个名为:loop
loop
- 如果行不包含
(这就是,
的意思)/,/!
- 将下一行追加到模式空间(
)N
- 分支到/转到
标签(循环
)b循环
- 将下一行追加到模式空间(
- 因此,它将继续追加行和循环,直到找到
,然后运行,
命令,将第一个逗号之前的所有字符与(多行)模式空间匹配,并执行替换s
[^\,]*
[^,]*匹配到逗号或行的末尾。我在试图让它继续搜索直到找到逗号时遇到了麻烦,即使它必须通过换行符。我试图通过:%s/foo/bar/gc在vim中执行sed。这可能是个问题吗?你检查过我的建议了吗?这似乎对我不起作用,但可能是因为我没有提供足够的关于我的问题的信息。我已经编辑了原始问题。我基本上想找到字符串func(一直到逗号。我有:%s/func([^,]*,/bar/gc),但这似乎在新行中找不到,或者可能我不确定放在哪里(?m)。我直接把它放在[^,]*。如:%s/func((?m)[^,]*,/bar/gc。这是正确的吗?在SED中,它不会以这种方式工作。请检查以下内容:你能回答这个问题,这样我就可以接受它吗?另外,谢谢你的帮助。你能在你的答案中包含相关的部分吗?谢谢。
func("ok", "more strings")