【问题标题】:how to extract line portion on the basis of start substring and end substring using sed or awk如何使用 sed 或 awk 根据开始子字符串和结束子字符串提取行部分
【发布时间】:2018-12-05 02:11:09
【问题描述】:

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

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

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

;whichisvery
;whichisvery

我接近得到它,但我最终使用来自here 的命令从 cat 获取字符串到最后一个可爱。

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

我来了

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

如何将 cat 中的文本获取到第一次出现的 cute not last?

【问题讨论】:

标签: linux awk sed data-analysis


【解决方案1】:

鉴于您发布的所有输入,您需要的是:

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

【讨论】:

  • 这个在我的真实文件上效果更好。出于某种原因,第一个答案在上面的示例中做得很好,但不适用于我的真实文件。我认为这个答案正在以更好的方式处理复杂的字符串。请在 sed 中尝试类似的答案,并感谢您的回答。
  • Please try similar answer in sed 是什么意思?没有类似的 sed 答案。
  • 嗯,好吧,酷。我认为这个问题可以通过多种方式解决。
  • 问题可以通过多种方式解决,正如您在获得的各种答案中所看到的那样,但不能在所有工具中以相同的方式解决,因为不同的工具具有不同的功能。跨度>
【解决方案2】:

编辑:自从我投反对票以来,我已经在awk 中给出了解决方案,我不明白为什么。所以在sed中添加一个解决方案(尝试是否可以删除否决票)。

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

您能否尝试关注一下,如果这对您有帮助,请告诉我。

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

【讨论】:

  • @Inian,我觉得我可以给出这个解决方案,所以我已经给出了(awk 标签也被标记为有问题),如果你觉得你投反对票,我不会阻止你,干杯。
  • 我没有否决你的答案。我会投赞成票,因为两者都是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
相关资源
最近更新 更多