发布网友 发布时间:2022-04-24 11:56
共4个回答
热心网友 时间:2023-10-11 22:56
vim我不了解,正则替换应该都差不多。
如果情况确实如你提供的这么简单:
^(.+? )(.+\na\. )(.+\nb\. )(.+\nc\. )
替换为:
\1\2\1\3\1\4\1
▲注意4个)前都有一个空格。
我在EmEditor中试的。
其他编辑器,可能换行符\n会有区别,比如针对 Windows换行格式(CrLf) 要写成\r\n。
你试试,不行再追问讨论。追问谢谢!我也用emeditor。问题解决了,是我的emeditor版本实在太低了。
追答
我看到了你之前的追问:(很抱歉没空及时答复)
上面a.、b.、c.各行之间还有多个无关行需要删除,请问如何匹配这些无关行?我用(^.+\n){1,9}这样的格式想匹配1到9行,但是不行啊,是不是{1,9}这种表达方式不对啊?
很高兴你已解决。
追问不答也是浪费,希望对别人还有点用:
EmEditor 界面搜索 的“匹配多行”要开启相关设置项(如图):
▲如需帮助,可再联系。
表达式可以用:
^([\s\S]*?\n){1,9}
或
^(.*?\n){1,9}
▲注意要用?约束。
▲我用*而不是+,把 一个空行 作为 一行 处理。
也可用EmEditor的宏来处理,用脚本语言的“多行”属性,可以不必改动界面选项。
开启“匹配多行”可能带来一定风险,慎用。
热心网友 时间:2023-10-11 22:56
可以是可以,但要通常使用 vim 的脚本功能。 原始文件不上传,怎么帮你测试脚本? 文件格式不一定像你说的那么单纯,用正则跨行匹配会麻烦。
热心网友 时间:2023-10-11 22:57
sed -i '/^.\./!{
p
s/\([^[:blank:]]*\).*/\1/
h
d
}
/^.\./{
G
s/\(.\.\) \(.*\)\n\(.*\)/\1 \3 \2/
}' 文本文件名
用VIM应该是LINUX系统吧,将上面的命令原样复制到命令行,文本文件名用实际的文件名替代
热心网友 时间:2023-10-11 22:57
on assuming office as