2011-06-08 61 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的我相信)使用更容易允許在字符串中嵌入轉義序列。