我对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
答案 0 :(得分:3)
如果您对
的结果感到满意sed -e 's/.*|\([^]]*\)|.*/\1/g' input.txt
除了无法删除不包含分隔符的行之外,只需执行:
sed -n -e 's/.*|\([^]]*\)|.*/\1/gp' input.txt
仅打印替换发生的行。或者,您可以明确删除不需要的行:
sed -e '/|.*|/!d' -e 's/.*|\([^]]*\)|.*/\1/g'