LINUX.ORG.RU

sed: вставить символ между соседними TAB

 ,


0

2

Есть текстовый файл с TAB разделителями полей. Нужно, чтобы в случае, если поле пустое, т.е. идет 2 TAB подряд, между ними вставлялся символ пробела.

sed -e "s/\t\t/\t \t/g"
не подходит, т.к. обрабатывается по 2 TAB в каждом вхождении regexp. В результате в зависимости от номера поля первого вхождения, либо четные, либо нечетные поля остаются пустыми и приходится повторно применять этот regexp. Тогда все вхождения будут заменены:
sed -e "s/\t\t/\t \t/g;s/\t\t/\t \t/g"
Можно ли на sed сделать более короткий regexp? Как он будет выглядеть?


Можно ли на sed сделать более короткий regexp?

В сед-гольф играете?

Если нет, то пользуйтесь нормальными языками — вопросов будет куда меньше. Ну, например:

#!/usr/bin/gawk -E

BEGIN {
    FS = OFS = "\t";
}

{
    for (f = 1; f <= NF; f++) {
        if ($f == "")
            $f = " ";
    }
    print;
}

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

В сед-гольф играете?

в тексто-дроч

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.