преобразуйте txt файл со смешанными пробелами/вкладками к вкладкам только (где возможный) [закрылся]

7
задан Albert 18 July 2010 в 17:22
поделиться

7 ответов

Ок, ни одно из приведенных решений меня не устроило, поэтому я написал это сам. :)

См. здесь:

5
ответ дан 7 December 2019 в 09:55
поделиться

Вы можете использовать регулярное выражение для замены N пробелов символом табуляции. Например, в Python:

import re
re.sub('[ ]{4}', '\t', text)
0
ответ дан 7 December 2019 в 09:55
поделиться

В зависимости от исходного языка вы можете попробовать GNU indent . Он может делать множество вещей, связанных с отступом исходного кода, хотя может быть более сложным, чем вам нужно.

Например, если я дам следующую программу для indent -di0

#include <stdio.h>

int main(int argc, char **argv)
{
  int i;
    int j;
  for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10; j++)
    {
        printf("x");
    }
  }
}

, она заменит ее на:

#include <stdio.h>

int 
main(int argc, char **argv)
{
    int i;
    int j;
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) {
            printf("x");
        }
    }
}

Или, если вам нужно что-то глупое простое, есть expand / undepand команды.

1
ответ дан 7 December 2019 в 09:55
поделиться
sed -r 's/ {2}/\t/g' file
0
ответ дан 7 December 2019 в 09:55
поделиться

Вот возможное решение на Python:

import re
import fileinput

pat = re.compile("^(  )+")

for line in fileinput.input(inplace=True):
    print pat.sub(lambda m: "\t" * (m.end() // 2), line, 1),
0
ответ дан 7 December 2019 в 09:55
поделиться

Две вещи,

  1. sed -i ваш друг - sed -i XXX.txt 's / ^ [] \ {2 \} / \ t / g '
  2. Вы не можете создать регулярное выражение для умножения замены табуляции на длину пробела.

Учитывая, что мой AWK-fu не силен (и я не знаю, может ли он делать то, что не может № 2), я напишу PHP-скрипт для вычисления пробелов и замены их табуляциями.

0
ответ дан 7 December 2019 в 09:55
поделиться

Это преобразует ведущие пробелы (даже перемежающиеся с табуляциями) в табуляции. Укажите количество пробелов для преобразования, задав переменную. Лишние пробелы будут сведены к нулю. Пробелы и табуляции, которые появляются после любого символа, кроме пробела или табуляции, не трогаются.

tstop=2
sed "s/^\([[:blank:]]*\)\(.*\)/\1\n\2/;h;s/[^[\n]*//;x;s/\n.*//;s/ \{$tstop\}/X/g;s/ //g;G;s/\n//g" inputfile

Пример:

[space][space][tab][tab][space][space][space][tab][space]TEXT[space][space][space]

будет преобразован в

[tab][tab][tab][tab][tab]TEXT[space][space][space]

Если это не совсем то, что вам нужно, можно внести коррективы.

0
ответ дан 7 December 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: