2010-03-16 2 views
1

У меня есть огромный текстовый файл с большим количеством линий, как:Замены до конца строки в Баше

asdasdasdaasdasd_DATA_3424223423423423 
gsgsdgsgs_DATA_6846343636 

.....

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

asdasdasdaasdasd_DATA_ 
gsgsdgsgs_DATA_ 

.....

Я знаю, что вы можете сделать S что-то похожее на:

sed -e "s/^DATA_*$/DATA_/g" filename.txt 

но он не работает.

Вы знаете, как?

Благодаря

ответ

1

С помощью регулярных выражений, * означает предыдущий символ, любое количество раз. Для того, чтобы соответствовать любому символу, используйте .

Так что вы действительно хотите .*, что означает любой символ, любое количество раз, как это:

sed 's/DATA_.*/DATA_/' filename.txt 

Кроме того, я удалил ^ что означает старт строки, так как вы хотите совместить «DATA_», даже если это не в начале строки.

+0

Это фактически не будет работать с данными образца - 'DATA_' не находится в начале строки. – Cascabel

+0

@Jefromi: увидел, что сразу после публикации - еще недостаточно кофе! :) – Martin

+0

отлично, это работает сейчас! просто вопрос las t, как можно сделать противоположность, я имею в виду, а не после DATA_ до конца, просто удалить все до DATA_? – flow

2

У вас есть две проблемы: вы излишне соответствие начало и конец строки с ^ и $, и вы ищете _* (ноль или более символов подчеркивания) вместо .* (ноль или более любых символов Вот что. вы хотите:

sed -e 's/_DATA_.*/_DATA_/' 

g на конце (глобальный) не будет ничего делать, потому что вы уже собираетесь удалить все, от первого экземпляра «DATA» прогрессивной - не может быть другой матч.

P.S. -e не является строго необходимым, если у вас есть только одно выражение, но если вы думаете, что можете больше на него напасть, это удобная привычка.

1

используя awk. Установите полевой разделитель как «DATA», затем получите поле 1 ($1). Нет необходимости в регулярном выражении

$ awk -F"_DATA_" '{print $1"_DATA_"}' file 
asdasdasdaasdasd_DATA_ 
gsgsdgsgs_DATA_ 
Смежные вопросы