shoorick: (Рыжий)
[personal profile] shoorick
Придумал способ, позволяющий вдвое уменьшить число пробелов в начале строки в текстовом файле:
perl -pi~ -e 's/^( +)\1(?=\S)/$1/' filename.ext

Date: 2013-08-07 11:47 am (UTC)
From: [identity profile] ichesnokov.livejournal.com
Пипец, а чё так сложно-то?
s/^ / /g;
(в первом случае два пробела, во втором - один)
Edited Date: 2013-08-07 11:49 am (UTC)

Date: 2013-08-07 06:39 pm (UTC)
From: [identity profile] shoorick.livejournal.com
Нифига!
s/^  / /g уменьшает количество пробелов на один, если пробелов больше одного. Только что проверил на perl 5.14.2.

Потому и приходится чуть сложнее. Чуть, а не так — там всего-то регулярное выражение немного длиннее :-)

Конечно, в случае ровно с нулём либо двумя пробелами и s/^  / /g можно считать допустимым решением, но мне такое решение не нужно.
Edited Date: 2013-08-07 06:41 pm (UTC)

Date: 2013-08-08 03:35 pm (UTC)
From: [identity profile] ichesnokov.livejournal.com
Мда, недоглядел - почему-то был уверен, что /g заставит регулярку пройтись по *всем* парам пробелов, которые она увидит в начале строки, и заменить каждую пару на один пробел. И тестовый скрипт подкачал ))

Регулярка показалась сложной, т.к. за конструкцией (?= пришлось лезть в perldoc, чтобы понять, что она означает =) Так что я бы сделал более читабельно: s/^( +)\1(\S)/$1$2/. Но тогда в этом посте не было бы никакой изюминки, да? )))

Profile

shoorick: (Default)
shoorick

December 2016

S M T W T F S
    1 23
45678910
11121314151617
18 19 2021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 17th, 2025 12:10 am
Powered by Dreamwidth Studios