gpt4 book ai didi

regex - 跨行替换正则表达式,保留换行符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:51 25 4
gpt4 key购买 nike

我想要一个替换或打印样式的命令,其中包含跨行工作的正则表达式。并保留线条。

$ echo -e 'a\nb\nc\nd\ne\nf\ng' | tr -d '\n' | grep -or 'b.*f'
bcdef

$ echo -e 'a\nb\nc\nd\ne\nf\ng' | tr -d '\n' | sed -r 's|b(.*)f|y\1z|'
aycdezg

我想使用 grep 或 sed,因为我想知道人们在使用 awk 或 perl 之前会做什么......

他们不会吗? .* 不可用?他们没有其他等价物吗?

可能使用跨行的正则表达式修改某些输入,并将其打印到标准输出或输出到文件,保留行

最佳答案

这应该可以满足您的需求:

$ echo -e 'a\nb\nc\nd\ne\nf\ng' | sed ':a;$s/b\([^f]*\)f/y\1z/;N;ba'
a
y
c
d
e
z
g

它累积所有行然后进行替换。它寻找第一个“f”。如果您希望它查找最后一个“f”,请将 [^f] 更改为 .

请注意,这可能会利用添加到 sed 的功能之后 AWKPerl变得可用(AWK 已经有一段时间了looong)。

编辑:

做多行 grep 只需要一点点修改:

$ echo -e 'a\nb\nc\nd\ne\nf\ng' | sed ':a;$s/^[^b]*\(b[^f]*f\)[^f]*$/\1/;N;ba'
b
c
d
e
f

关于regex - 跨行替换正则表达式,保留换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4808163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com