我有示例文件:
<i>text</i>
verse 19 3 1 text2
verse 19 3 2 text3
<i>text4</i>
verse 19 4 1 text5
verse 19 4 1 text6
verse 19 4 1 text7
我需要将其转换为:
pericope 19 3 1 <i>text</i>
verse 19 3 1 text2
verse 19 3 2 text3
pericope 19 4 1 <i>text4</i>
verse 19 4 1 text5
verse 19 4 1 text6
verse 19 4 1 text7
如何为此构建正则表达式?
答案 0 :(得分:1)
您可以使用awk
:
awk '/<i>/{p=$0;next} p{s=$0; sub(/ +[^ ]+$/, "", s); print "pericope", s, p; p=""} 1' file
pericope verse 19 3 1 <i>text</i>
verse 19 3 1 text2
verse 19 3 2 text3
pericope verse 19 4 1 <i>text4</i>
verse 19 4 1 text5
verse 19 4 1 text6
verse 19 4 1 text7
p
<i>
中保存行
"pericope", s, p
p
初始化为""
1
答案 1 :(得分:0)
假设您在vim中执行此操作并从文本标记后的第一行获取数字,则此正则表达式可以正常工作:
:%s/\(<i>text\d\?<\/i>\n\)\(verse\(\(\s\+\d\+\)\{3}\)\)/periscope\3 \1\2