使用sed替换捕获组内

时间:2018-02-12 19:55:45

标签: bash awk sed replace

我正在尝试在包含短语分隔的文本中使用word2vec,例如

I <phrase>like green beans</phrase> in my tortillas.

在将文本提供给word2vec之前,我需要输入:

I __like_green_beans__ in my tortillas.

我一直在尝试使用 sed 进行替换。通过做

sed -e 's@<phrase>\(.*\)</phrase>@__\1__@g' myfile.txt 

我可以摆脱分隔符,但我还没有找到替换捕获组内空间的方法。

是否可以使用 sed

2 个答案:

答案 0 :(得分:3)

你可以试试这个sed

sed -E ':A;s/(>[^ ]*) ([^<]*<)/\1_\2/;tA;s/<[/]*phrase>/__/g'

答案 1 :(得分:2)

使用gnu-awk

awk -v ORS= -v RS='<phrase>.*</phrase>' '1;
RT{gsub(/<\/?phrase>/, "___", RT); gsub(/ /, "_", RT); print RT}' file

I ___like_green_beans___ in my tortillas.
相关问题