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