UNIX Script - перемещение символа в каждой строке файла - PullRequest
0 голосов
/ 10 декабря 2010

У меня есть файл с несколькими записями и каждой записью длиной 100. В каждой строке есть сегмент длиной 50 символов (25-75), который зарезервирован для штата, страны. Однако теперь мне нужно, чтобы сегмент был State, Country (удалить пробел между и Country) и в то же время поддерживать длину поля равной 50.

Использование команды Perl perl -pi -e 's /, /, / g' * .txt Мне удалось удалить пробел, однако это уменьшает длину сегмента до 49. Есть ли способ, которым я могу удалить пространство, а также поддерживать длину сегмента, а также сделать это для всех записей в файле?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Звучит так, как будто нам нужно сделать подсчет - это метод грубой силы:

s/^(.{24})([^,]+)( +)(.{,49})(.{25})$/$1$2$4$3$5/;

Это соответствует позициям персонажей 1-24 в $ 1;Государственная часть до первой запятой в 2 доллара США, строка из одного или нескольких пробелов в 3 доллара США, Страна в 4 доллара США и позиции символов 76-100 в 5 долларов США.

Замена перемещает пробелы после Страны,таким образом сохраняя длину в соответствии с запросом.

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

0 голосов
/ 10 декабря 2010

Зачем использовать Perl, если вы можете использовать sed?Попробуйте:

sed 's/,\(\s*\)\([^,]*\)/,\2\1/g'

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

a, b, c

становится

a,b ,c 

(с пробелом после c)

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