2016-03-05 4 views
1

У меня есть файл журнала, содержащий следующие строкиSED удаления текста из файла

«TSAGE_20160304193254_AAA_29792A_1103.tgz: двоичный файл (стандартный ввод) соответствует»

мне нужно удалить первый из линии до 29792A и текст после этого, так что файл выглядит так:

29745gv92A 
297342A 
2934792A 
29755692A 
29778892A 
+0

Пробовали ли вы что-то вроде 'вырезать -d "-" -f4'? –

+0

i dont как как использовать разрез. я использую его с sed? – Rich

+0

Просьба уточнить вопрос и предоставить минималистский пример ввода, ожидаемого результата и кода, который вы пробовали. – peak

ответ

0

Вы можете использовать разрез, чтобы получить что-то между разделителями вроде _.
Если вы хотите, чтобы перенаправить его в другой файл, используйте

cut -d"_" -f4 logfile > otherfile 

Вы можете сделать что-то подобное с sed, но вам нужно будет сказать СЭД, что ему придется пропустить шаблон [^_]*_ (символ, кроме подчеркивания неоднократного 0 или более раз), а затем подчеркивание). Вы должны пропустить этот (шаблон) {3} раз с ^ начала строки.
Вторая строка, которую вы соответствуете ([^_]*), является той частью, которую вы хотите. .* - это остальная часть линии и является мусором.
В первой части sed будет записано 2 строки, поэтому вспомните \2, чтобы получить вторую.
Вместе с обратной косой черты вы будете иметь

sed 's/^\([^_]*_\)\{3\}\([^_]*\).*/\2/' logfile 

Я не проверял команду sed, то cut лучше.

+0

Спасибо, что вы работаете с командой cut – Rich

0

Perhap это может работать:

awk -F_ '{print $4}' file 
29792A