如何在unix中删除以Timestamp开头的所有行

时间:2014-08-19 17:28:21

标签: unix sed

我有一个基本上是日志文件的文本文件。因为有些日志以Timestamp和LogID开头,格式为

timestamp=2014-08-18 23:59:48.315|logId=22fef71f-979a-46aa-81b5-432d34130c34|  ( followed by some text )

timestamp=2014-08-18 22:59:48.315|logId=22fef71f-979b-46aa-81b5-432d34130htf|  ( followed by some text ) 

我需要摆脱时间戳并获得剩下的部分。

在这种情况下如何使用“sed”命令。

2 个答案:

答案 0 :(得分:2)

使用cut

cut -f 2- -d \| file
  • -f 2-匹配从第2个字段到行尾的所有内容。
  • -d \||设置为字段分隔符。

使用sed

sed 's@^[^|]*|@@' file
  • [^|]匹配任何不是|
  • 的内容

输出:

logId=22fef71f-979a-46aa-81b5-432d34130c34|  ( followed by some text )
logId=22fef71f-979b-46aa-81b5-432d34130htf|  ( followed by some text ) 

答案 1 :(得分:1)

如果你有一个由单个字符分隔的字段(在这种情况下是'|'),cut通常是要走的路,就像在konsolebox的答案中一样。如果分隔符不一定是单个字符(例如,任何数量的空格),那么awk可能就是答案。

但是,由于您专门询问了sed,这将有效:

sed 's/^[^|]*|//'

它替换( s )文本从行的开头( ^ )开始,并包含任意数量的非管道( [^ |] * )后跟一个管道( | ),替换为空( // 之间没有任何东西)。