заменить табуляции с отступом на фиксированное количество пробелов на табуляцию

Wine означает "Wine Is Not an Emulator", и вы запрашиваете эмулятор. Существует несколько вариантов (например, Virtualbox, который есть в репозиториях дистрибутива, по крайней мере, для веток debian и arch).

Вы не можете установить Windows через вино и ожидать, что он будет работать правильно. Вместо этого вам нужно виртуализировать систему и установить в ней окна. Virtualbox , Qemu и VMware (платный) - это все варианты, которые могут вас заинтересовать.

3
28.03.2019, 22:33
1 ответ

Если вы ищете универсальное решение с помощью других инструментов командной строки -, для этого можно использовать Awk.

var=$'\t\t\tnewcontent'
echo "$var" | awk '{ gsub(/^[\t]+/," ",$0) }1'

Приведенная выше команда заменяет еще одно вхождение Tab одним пробелом, т.е. 2 и аргумент в gsub. Однако вы можете настроить его, создав необходимое количество пробелов

awk -v n=5 ' BEGIN{ spaces = sprintf("%"n"s"," ") }{ gsub(/^[\t]+/,spaces,$0) }1'

Судя по последнему обновлению, OP хочет заменить количество ведущих вкладок точным количеством найденных пробелов,

awk -F$'\t' '{ spaces = sprintf("%"(NF-1)"s"," "); gsub(/^[\t]+/,spaces,$0) }1'

Логика заключается в установке разделителя полей на \t, количество ведущих вкладок можно определить, выполнив NF-1. Определив количество ведущих вкладок, используйте его для создания того же количества пробелов из более раннего метода sprintf().

Вы можете увидеть это, проверив hexdump -Cдо и после замены

echo "$var" | hexdump -C
00000000  09 09 09 6e 65 77 63 6f  6e 74 65 6e 74 0a        |...newcontent.|
0000000e

теперь с заменой

echo "$var" | awk -F$'\t' '{ spaces = sprintf("%"(NF-1)"s"," "); gsub(/^[\t]+/,spaces,$0) }1' | hexdump -C
00000000  20 20 20 6e 65 77 63 6f  6e 74 65 6e 74 0a        |   newcontent.|
0000000e
2
27.01.2020, 21:24

Теги

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