2014-11-20 10 views
2

Я пытаюсь использовать VIM, чтобы заменить все символы до первой запятой в большом текстовом файле (10mb +)Vim заменить все символы до первой запятой

У меня есть то, что выглядит как:

foo,bar,sun 
apple,pear,goose 
monkey,pig,baby 

и я хочу, чтобы это выглядело как:

bar,sun 
pear,goose 
pig,baby 
+0

Вы говорите, что "заменить", но вы на самом деле удаление символов. –

ответ

9

Следующая должен сделать это

:%s/^[^,]*,// 

Объяснение:

  • : Командный режим
  • % Применить на каждую линию
  • с Заменитель
  • /матч
    • ^С начала строки
    • [^,] Любой символ, кроме запятой
    • * (См предыдущий) Повторный или пустой
    • , запятой
  • /заменить
    • ничего
  • /закончил

В качестве альтернативы вы можете использовать СЭД:

sed 's/^[^,]*,//' -i FILENAME 

или

sed 's/^[^,]*,//' FILENAME > NEWFILENAME 

Edit: незначительные форматирование и объяснить ":"

2

Это следует сделать это:

[esc]:%s:^[^,]*,:: 

редактировать: конечно, вы можете также использовать сокращение:

cut -d , -f 2- <mybigfile.txt> newfile.txt 
+0

Спасибо! это сработало! – user3646369

1

:%s/.\{-},//

В этой версии используется нежирный квантор \{-}, который заставляет предыдущую точку сопоставлять 0 или более раз, но как можно меньше (следовательно, она не является жадной).

Это похоже на использование *? в большинстве других ароматов регулярных выражений.

6

Вы можете использовать

:%norm df, 

запустить нормальную команду df, на каждой строке в файле. Который удаляет с начала строки до первой запятой и включая ее.

Read :help :normal

Смежные вопросы