【问题标题】:Grep text only only after [word]:仅在 [word] 之后使用 Grep 文本:
【发布时间】:2016-08-17 16:46:06
【问题描述】:

我有一个文件 example.txt,其中包含以下文本:

[one]: bla bla bla onebla twobla
[two]: hey heya noheya
[onemore]: i got mad and etc

我需要 grep 并仅显示 [myword]: 之后的文本

试图测试grep [myword] /tmp/example.txt | cut -d ':' -f 2

在每个[myword] 上,它都在括号后打印,但我怎样才能只得到我只需要而不是全部的那个?

【问题讨论】:

  • 输入中没有[myword]
  • 你想做什么?
  • 我只需要打印某些括号之后的测试。例如,我只想打印在[one]: 行中的文本,而不是在[two]:[onemore]:lines 之后的文本,这样输出将为bla bla bla onebla twobla。如果我想在 [onemore]: 之后全部打印 - 正确的输出应该是 i got mad and etc

标签: linux bash shell grep


【解决方案1】:

您可以删除第一个短语[something]: 并使用

grep 和 sed:

$ grep -w "\[onemore\]:" words.txt | sed 's/\[onemore\]://g'
 i got mad

grep 和 awk:

$ grep -w "\[onemore\]:" words.txt | awk -F: '{print $2}'
 i got mad

【讨论】:

  • 我需要得到这样的输出,例如:'Grep [one more]: words.txt' 我需要得到的结果:'I got mad'
  • @alya 无论你的单词/短语是什么,都将其添加到双引号中:grep -o -w "i got mad" words.txt 将导致:i got mad
  • @alya:我很抱歉最后的评论,没有看到你发布的确切的 grep 输入。我编辑了我的答案,为您提供您想要的。
  • 谢谢@Kristo,但它不能按需要工作。请看我上面的评论。
  • @alya:我确实阅读了您的评论并相应地编辑了我的帖子。如果编辑后的解决方案不能按需要工作,请详细说明其中一个解决方案如何不能完全正常工作。
【解决方案2】:

谢谢大家!从 Unix 和 Linux 得到其他答案:

$ awk '/\[myword\]/{sub(/^[^]]*\]:[[:blank:]]*/,"");print}' example.txt

$ awk '/\[myword\]/{sub(/^[^]]*\]:[[:blank:]]*/,"");print}' example.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 2015-08-15
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多