如何使用sed或awk在开始子字符串和结束子字符串的基础上提取行部分

时间:2018-06-26 11:09:51

标签: linux awk sed data-analysis

我有一个多行文件,文本没有空格。

Thereisacat;whichisverycute.Thereisadog;whichisverycute.
Thereisacat;whichisverycute.Thereisadog;whichisverycute.

我想提取cat和cute之间的字符串(第一次出现不是第二次出现),即输出是

;whichisvery
;whichisvery

我快要得到它了,但是我最终还是用here的命令从猫到最后一个可爱的人弄来了。

sed -e 's/.*cat\(.*\)cute.*/\1/'

我得到

;whichisverycute.Thereisadog;whichisvery
;whichisverycute.Thereisadog;whichisvery

如何将猫的文字显示为可爱而不是最后的可爱?

2 个答案:

答案 0 :(得分:5)

编辑: :自从我投下赞成票以来,我已经在awk中给出了解决方案,我不明白为什么。因此,请在sed中添加解决方案(尝试删除否决票)。

sed 's/cute.*//;s/.*cat//' Input_file

能否请您尝试以下操作,如果有帮助,请告诉我。

awk '{sub(/cute.*/,"");sub(/^.*cat/,"");print}'  Input_file

答案 1 :(得分:2)

鉴于您发布的输入内容是:

$ awk -F'cat|cute' '{print $2}' file
;whichisvery
;whichisvery