grep文字仅在“:”之后

时间:2018-10-31 18:39:25

标签: linux bash grep

我有一个.txt文件,其中包含诸如blablabla:thatswhationlywant之类的不同单词。

blablabla词总是不同的。因此,我只需要打印出“:”之后的所有字符-我该怎么做?

非常感谢!

3 个答案:

答案 0 :(得分:1)

您可以像这样使用grep:

grep -o ':.*' file.txt

但这将包括:

我可能会用cut来做,因为它会表现得更好

cut -d: -f2 file.txt

答案 1 :(得分:0)

使用cut工具过滤grep的输出。 grep ":" file.txt | cut -d ":" -f 2仅在字符':'之后显示文本 请查看cut的手册页以获取更多信息

答案 2 :(得分:-2)

另一种可能性。这并不比提供的grep解决方案更好或更糟,但是如果您是更熟悉sed s///操作的简单应用的人之一,那么grep的-o与{{1} }可能会吸引人。

\K

如果您对$: sed 's/^.*://' in.txt thatswhationlywant. 不太熟悉(请查看here了解更多详细信息)-

  • sed表示找到模式s/a/b/并将其替换为a
  • b将搜索模式锚定在行的开头
  • ^与任何字符匹配(同样,请参见精确异常情况的详细信息)
  • .的意思是“前面的模式中的0个或多个”,在这种情况下是点(*),因此任何字符的数目都是任意的
  • .是文字冒号

因此:的意思是“用任何/所有字符替换行首,直到不包含冒号。”

请注意,冒号是一个字符,因此,如果一行上有多个冒号,则会将它们全部消耗掉,因为's/^.*://'是“贪婪的”。

*

如果这不是您想要的,请放在$: echo "a:b:c:d"|sed 's/^.*://' d 中(这表示“ 不是一个冒号”,因为在方括号“字符类”中,{{1} }是[^:]的'not'),例如:

^