2011-06-08 64 views
1

我有一个像桑达删除线的所有内容后 t

19599 user 20 0 120m 32m 4260 S 14.0 5.3 3:21.13 app.out \t Wed Jun 8 09:31:06 UTC 2011 
19599 user 20 0 120m 32m 4260 S 14.0 5.4 3:21.61 app.out \t Wed Jun 8 09:31:12 UTC 2011 
19599 user 20 0 121m 32m 4260 S 12.0 5.4 3:22.31 app.out \t Wed Jun 8 09:31:17 UTC 2011 

我想删除从\t在该行开始的所有字符O/P。 如何使用sed来做到这一点?

我试过awk -F t '{print $1}' ,但它删除了app.out中的t。

我要像

19599 user 20 0 120m 32m 4260 S 14.0 5.3 3:21.13 app.out 
19599 user 20 0 120m 32m 4260 S 14.0 5.4 3:21.61 app.out 
19599 user 20 0 121m 32m 4260 S 12.0 5.4 3:22.31 app.out 

O/P如果我写的awk这样的:

awk -F t '{print $1"t"}' 

它工作正常,但它只是一个变通。我怎样才能删除行中的所有字符\t直到行结束?

+2

你想在行中留下什么?我的意思是显示一个例子,它不是很容易找到\ t) – 2011-06-08 14:00:19

+0

@ Good.Dima更新了我的问题。 – 2011-06-08 14:13:12

+1

“\ t”实际上是制表符还是顺序反斜杠和't'? – 2011-06-08 14:58:35

回答

3

如果输出包含两个字符反斜线和“T”,那么你用:

sed 's/ *\\t.*//' 

这消除了导致到两个字符,反斜线和“T”,加上之后的所有空白他们。

如果输出包含制表符,则需要用实际的制表符替换'\\t'。

0

只是把它管道:

sed 's/\(.*\)\t.*/\1/' 
+0

序列号不工作。我得到相同的结果。 – 2011-06-08 14:01:49

+0

我得到 \ t Wed Jun 8 09:30:55 UTC 2011 19599 user 20 0 121m 32m 4260 S 8.0 5.4 3:20.54 app.out \ t Wed Jun 8 09:31:01 UTC 2011 19599 user 20 0 120m 32m 4260 S 14.0 5.3 3:21.13 app.out \ t Wed Jun 8 09:31:06 UTC 2011 – 2011-06-08 14:14:24

1
awk 'BEGIN { FS = "\t" } 1 == 1 {print $1}' file.name 
+0

对不起。它不工作我得到\ t Wed Jun 8 09:30:55 UTC 2011 19599 user 20 0 121m 32m 4260 S 8.0 5.4 3:20.54 app.out \ t Wed Jun 8 09:31:01 UTC 2011 – 2011-06-08 14:14:45

3

这听起来像你想在一个制表符分隔文本的第一个字段。你可以尝试之一:

cut -d $'\t' -f 1 
awk -F '\t' '{print $1}' 
sed $'s/\t.*//' 

$''语法在bash(和ksh和zsh的我相信)使用更容易允许在字符串中嵌入转义序列。