SED在多行之间保持标签之间的文本

时间:2011-05-09 10:47:17

标签: regex sed

我对sed非常新,所以即使查看示例,我也完全不知道如何为我的需要编写正确的代码(this one已经接近但似乎不适用于多行更换。

这是我的input.txt

  

这是分裂的测试......

     

| firstword | secondwordthirdword   fourthwordfifthwordsixthword

     

这是分裂的测试......

     

firstword | secondword | thirdword   fourthwordfifthwordsixthword

     

这是分裂的测试......

     

firstwordsecondword | thirdword |   fourthwordfifthwordsixthword

     

这是分裂的测试......

     

firstwordsecondwordthirdword   | fourthword | fifthwordsixthword

     

这是分裂的测试......

     

firstwordsecondwordthirdword   fourthword | fifthword | sixthword

     

这是分裂的测试......

     

firstwordsecondwordthirdword   fourthwordfifthword | sixthword |

我需要做的是删除两个“|”之外的所有文字并将文本保留在两个“|”

然后在每个单词(U + 200B)

之间插入Unicode零宽度空格

导致:

  

firstwordU + 200BsecondwordU + 200BthirdwordU + 200BfourthwordU + 200BfifthwordU + 200Bsixthword

我试过

sed '\|/d;/|/,$d' input.txt

更新:哪个做得不多

sed -e 's/.*|\([^]]*\)|.*/\1/g' input.txt

哪个接近,但不会删除任何不包含“|”的行(我需要删除两个内部未包含的所有内容“|”我不知道如何在单词之间添加零宽度空间。但就像我说的那样,我真的不知道我在做什么。 / p>

非常感谢任何帮助。

-Nathan

1 个答案:

答案 0 :(得分:3)

如果您对

的结果感到满意
sed -e 's/.*|\([^]]*\)|.*/\1/g' input.txt

除了无法删除不包含分隔符的行之外,只需执行:

sed -n -e 's/.*|\([^]]*\)|.*/\1/gp' input.txt

仅打印替换发生的行。或者,您可以明确删除不需要的行:

sed -e '/|.*|/!d' -e 's/.*|\([^]]*\)|.*/\1/g'