2014-09-19 74 views
0

寻找一种方式来从下面的行删除[11:55:43] [Server thread/INFO]:如何删除单词前的文本?

[11:55:43] [Server thread/INFO]: Justin has just earned the achievement [Time to Mine!] 

曾试图通过使用SED要做到这一点,但没有运气,正如其名字贾斯汀可以根据谁获得的成绩更改为另一个用户名。

有没有一种方法可以在用户名前删除[11:55:43] [Server thread/INFO]:而不必指定它? IE浏览器。 sed from,但在前面保留这个词,并在此之前删除任何内容?

回答

1

使用SED:

sed 's/\[.*\] \[.*\]: //' file 
Justin has just earned the achievement [Time to Mine!] 
+0

如果有'的]多个正好这并不工作:'输入文件。 例如,不适用'[11:55:43] [服务器线程/ INFO]:Justin刚刚获得]:成就[Time to Mine!]' – 2014-09-30 12:39:43

1

sed一个命令,以实现是:

sed 's/^.*: //' 

例如

echo '[11:55:43] [Server thread/INFO]: Justin has just earned the achievement [Time to Mine!]' |\ 
    sed 's/^.*: //' 
Justin has just earned the achievement [Time to Mine!] 
+2

假设在文本之外没有冒号所需的一个。相反,可能会更好地匹配两个“块”。 – 2014-09-19 11:42:03

+0

是的,完全同意......但答案在我的后不久提供,所以我不会剽窃。 – isedev 2014-09-19 11:46:41

0

随着sed

sed -e 's/^\[[^]]*\][^[]*\[[^]]*\]: //' 

如果匹配[(东西)](东西)[(东西)]:

0

这应该做的伎俩,将删除每一行的开始:

sed 's/.*: \([^ ]* has .*\)/\1/' file 
+0

这个名字是失败的,因为他试图在模式中添加名字,但是请求并没有要求包含这个名字,也没有* has。*就像我认为他把他放在他失败的sed中一样。 – NeronLeVelu 2014-09-19 12:14:38

0
sed 's/^\(*\[[^]]*]\)\{2\}: //' YourFile 
  • 也允许[...]
  • 之间的任何空间假设没有]:在2第一[...]内容像您的样品中
  • 打印行没有相匹配的结构不变

POSIX兼容(这样--posix与GNU sed)

0

A gawk

源文件:

$ cat infile 
[11:55:43] [Server thread/INFO]: Justin has just earned the achievement [Time to Mine!] 
[11:58:43] [Server thread/INFO]: Martin has just earned the achievement [Time to Mine!] 

代码:

$ gawk -F']: ' 'BEGIN{OFS=""}{$1=""}1' infile 
Justin has just earned the achievement [Time to Mine!] 
Martin has just earned the achievement [Time to Mine!] 
+0

'[11:55:43] [服务器线程/ INFO]:Justin有:$ 0。获得的收益:1美元[我的时间!]' – NeronLeVelu 2014-09-19 12:39:54

+0

编辑@NeronLeVelu – klashxx 2014-09-19 13:00:38

+1

我认为这会对OP和更多访问者更有帮助,当你为你的内涵添加一些解释。 – reporter 2014-09-19 13:12:57

相关问题