【问题标题】:Keep string between start and end pattern在开始和结束模式之间保留字符串
【发布时间】:2018-06-13 16:56:04
【问题描述】:

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

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

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

c__Abyssinian
c__Cact

我对正则表达式不太擅长,所以提前感谢您的帮助。

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

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

 和  作为模式的开始和结束
到

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

但是我没有得到想要的输出

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

这是我尝试过的命令:

echo "d__Affenpinscher|c__Abyssinian|h__Kathiawari|" | grep -o -P '(?<=c__).*?(?=|)'

【问题讨论】:

  • 您的问题的背景是什么?您是否使用特定的编程语言?您只想在 Bash 中操作文本文件吗?
  • sed 中的addr1,addr2 语法在addr1 选择的行和addr2 选择的行之间选择

标签: regex string unix


【解决方案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 |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多