Найдите и замените знак препинания в первом столбце для нескольких текстовых файлов

Требуется решение, подобное этому сообщению (Найти и заменить конкретный термин в нескольких файлах), но для замены знаков препинания в первом столбце каждого текстового файла с разделителями.

Пример:

file1.txt
afile2.txt
3file.txt
...

все остальные имена файлов заканчиваются на .txt

Формат файлов txt имеет «табуляцию» между столбцами и выглядит так:

aaaa:bbb    second_column    third_column
w:xyz    another_second_column    another_third_column

Мне нужно заменить : в первом столбце другим символом, например ##.

Пожалуйста помоги.

Perl обрабатывает символ : как средство обрезки столбцов?


person horkust    schedule 28.10.2011    source источник
comment
Судя по вашим комментариям, у меня возникло ощущение, что вы задаете неправильный вопрос. Почему вы хотите удалить толстую кишку? Это не метасимвол в Perl.   -  person TLP    schedule 28.10.2011


Ответы (1)


Замените первое двоеточие в первом столбце, разделенном табуляцией в строке, на ##:

perl -i.bak -pe's/^([^\t:]*):/$1##/' *.txt

Он обрабатывает все .txt-файлы в текущем каталоге, сохраняя резервные копии в .bak-файлы.

Вот вариант, который не требует захвата (предложен @Brad Gilbert в комментариях):

perl -i.bak -pe's/^[^\t:]*\K:/##/' *.txt

Оба сценария дают одинаковый результат.

person jfs    schedule 28.10.2011
comment
s/:/##/ было бы достаточно. Однако +1. - person Toto; 28.10.2011
comment
Я обрезаю первый столбец всякий раз, когда появляется символ:. Вот почему мне нужна замена. Что делает: в Perl? Да, ^ \ t оставит 2-й и 3-й столбцы нетронутыми. - person horkust; 28.10.2011
comment
@ M42: Если в первом столбце нет :, значит s/:/##/ неверно. - person jfs; 28.10.2011
comment
@horkust: создайте минимальный пример, демонстрирующий вашу проблему (с минимальным вводом, ваш код, который его обрабатывает, ожидаемый результат и то, что вы получите взамен) и опубликуйте это как вопрос. - person jfs; 28.10.2011
comment
perl -i.bak -pe's/^[^\t:]*\K:/##/' *.txt работает с более новыми версиями Perl - person Brad Gilbert; 28.10.2011