Sed удалить весь контент в строке после \ t - PullRequest
2 голосов
/ 08 июня 2011

У меня o / p, как

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 в строке.Как я могу сделать это с sed?

Я пытался с awk -F t '{print $1}', но он удалял t из app.out.

Я хочу o / p как

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

Если бы я написал awk следующим образом:

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

он работает нормально, но это только работавокруг.Как я могу удалить все символы, начиная с \t в строке до конца строки?

Ответы [ 4 ]

3 голосов
/ 08 июня 2011

Если вывод содержит два символа обратной косой черты и 't', тогда вы используете:

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

Это удаляет пробелы, ведущие к двум символам, обратной косой черте и 't', а также все после них.

Если выходные данные содержат символ табуляции, вам нужно заменить '\\t' фактическим символом табуляции.

3 голосов
/ 08 июня 2011

Звучит так, как будто вы хотите первое поле в тексте с разделителями табуляции. Вы можете попробовать один из:

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

Синтаксис $'' используется в bash (и я считаю, что ksh и zsh) упрощают встраивание escape-последовательностей в строки.

1 голос
/ 08 июня 2011
awk 'BEGIN { FS = "\t" } 1 == 1 {print $1}' file.name
0 голосов
/ 08 июня 2011

Просто пропустите через:

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