在开始和结束模式之间保持字符串

时间:2018-06-12 12:55:19

标签: regex string unix

我有一个包含此类内容的文本文件:

@api.constraints('field1','field2')
def _check_duplicate_(self):
    _logger.info('MY CONSTRAINT IS CALLED')
    import pdb;pdb.set_trace()

我想获得以“c__”开头并以“|”结尾的所有事件所以最终的结果是:

d__Affenpinscher|c__Abyssinian|h__Kathiawari|
a__Gold|y__Slix|c__Kathiawari|c__Cact

我对正则表达不太好,所以感谢你的帮助。

编辑:我正在寻找一个bash命令,所以grep / sed / awk可用 我试图从一个基本的例子开始:

c__Abyssinian
c__Cact

with< PRE>和< / PRE>该模式的开始和结束 到

sed -n "/<PRE>/,/<\/PRE>/p" input.html

但我没有获得想要的输出

编辑2:我试图从类似的线程How to use sed/grep to extract text between two words?调整这个答案但我必须做错事,因为我的输出是空的。

这是我试过的命令:

sed -n "/c__/,/|/p" breedList.txt > breedC.txt

1 个答案:

答案 0 :(得分:1)

rkta的回答做了诀窍,谢谢:):

echo "d__Affenpinscher|c__Abyssinian|h__Kathiawari|" | grep -o -P '(?<=c__).*?(?=\|)' The vertical bar | is a special character and needs to be escaped.

You say: start with "c__" and end with "|", but c__Cact doesn't end with |