Замените пробелы на вкладки в Linux

Как заменить пробелы на вкладки в Linux в данном текстовом файле?

Ответы на вопрос(8)

.

    tr -cs '[:space:]'
 wingedsubmariner28 янв. 2017 г., 07:21
На самом деле, с-c он заменяет последовательные символы, которыене пространства.
 Matthew Read23 июн. 2017 г., 18:53
Вопрос о вкладках, это нет ответ.

лучшетр команда:

tr [:blank:] \\t

Это очистит вывод, скажем,распаковать -l , для дальнейшей обработки с помощью grep, cut и т. д.

например.,

unzip -l some-jars-and-textfiles.zip | tr [:blank:] \\t | cut -f 5 | grep jar
 nachocab27 нояб. 2014 г., 14:35
Я должен использовать кавычки, чтобы заставить его работать:tr '[:blank:]' \\t
 Ömer An30 июл. 2018 г., 14:47
Я нечтобы заставить его работать, нужно использовать кавычки:tr [:blank:] \\t

что вы можете попробовать с помощью awk

awk -v OFS="\t" '$1=$1' file1

или САС, если вы предпочитаете

sed 's/[:blank:]+/,/g' thefile.txt > the_modified_copy.txt

или даже тр

tr -s '\t' < thefile.txt | tr '\t' ' ' > the_modified_copy.txt

или упрощенная версия решения tr, предложенная Сэмом Бисби

tr ' ' \\t < someFile > someFile
 Jess11 апр. 2013 г., 21:37
Arg. Мне пришлось использовать метод проб и ошибок, чтобы SED работал. Я понятия не имею, почему я должен был избежать знака плюс, как это:ls -l | sed "s/ \+/ /g"
 Sam Bisbee15 сент. 2009 г., 00:12
В вашем примере с sed лучшие практики предписывают использовать tr для замены отдельных символов на sed с целью повышения эффективности / скорости. Кроме того, пример tr намного проще:tr ' ' \\t < someFile > someFile
 Nikola Novak29 июн. 2014 г., 20:13
Сawk -v OFS="\t" '$1=$1' file1 Я заметил, что если у вас есть строка, начинающаяся с цифры 0 (например,0 1 2), то строка будет опущена из результата.
 Victor Yarema22 февр. 2016 г., 20:29
@ Джесс, Вы нашли "правильный синтаксис по умолчанию " регулярное выражение. По умолчанию sed рассматривает одиночный (неэкранированный) знак плюс как простой символ. То же самое верно для некоторых других символов, таких как '?'Вы можете найти больше информации здесь:gnu.org/software/sed/manual/html_node/... , Подобные подробности синтаксиса можно найти здесь (обратите внимание, что это man для grep, а не sed):gnu.org/software/grep/manual/grep.html#Basic-vs-Extended.
 Jonathan15 сент. 2009 г., 16:37
Конечно, tr имеет лучшую производительность, чем sed, но главная причина, по которой я люблю Unix, заключается в том, чтоЕсть много способов сделать что-то. Если вы планируете делать эту замену много раз, вы будете искать решение с хорошей производительностью, но если вы собираетесь сделать это только один раз, вы будете искать решение, которое включает команду, которая заставляет вас чувствовать себя комфортно.

га в закладки (преобразуются только начальные пробелы):

find . -name "*.js" -exec bash -c 'unexpand -t 4 --first-only "$0" > /tmp/totabbuff && mv /tmp/totabbuff "$0"' {} \;
 arkod04 нояб. 2015 г., 10:26
Проверено в Cygwin на Windows 7.

Вы также можете использоватьastyle, Я нашел это весьма полезным, и у него есть несколько вариантов:

Tab and Bracket Options:
   If  no  indentation  option is set, the default option of 4 spaces will be used. Equivalent to -s4 --indent=spaces=4.  If no brackets option is set, the
   brackets will not be changed.

   --indent=spaces, --indent=spaces=#, -s, -s#
          Indent using # spaces per indent. Between 1 to 20.  Not specifying # will result in a default of 4 spaces per indent.

   --indent=tab, --indent=tab=#, -t, -t#
          Indent using tab characters, assuming that each tab is # spaces long.  Between 1 and 20. Not specifying # will result in a default assumption  of
          4 spaces per tab.`

мягких вкладок в жесткие вкладки в текстовых файлах.

Поместите и выполните сценарий из папки, в которой находятся простые текстовые файлы.

#!/bin/bash

find . -type f -and -not -path './.git/*' -exec grep -Iq . {} \; -and -print | while read -r file; do {
    echo "Converting... "$file"";
    data=$(unexpand --first-only -t 4 "$file");
    rm "$file";
    echo "$data" > "$file";
}; done;
Воспользуйтесь программой «Расширить (1)»
UNEXPAND(1)                      User Commands                     UNEXPAND(1)

NAME
       unexpand - convert spaces to tabs

SYNOPSIS
       unexpand [OPTION]... [FILE]...

DESCRIPTION
       Convert  blanks in each FILE to tabs, writing to standard output.  With
       no FILE, or when FILE is -, read standard input.

       Mandatory arguments to long options are  mandatory  for  short  options
       too.

       -a, --all
              convert all blanks, instead of just initial blanks

       --first-only
              convert only leading sequences of blanks (overrides -a)

       -t, --tabs=N
              have tabs N characters apart instead of 8 (enables -a)

       -t, --tabs=LIST
              use comma separated LIST of tab positions (enables -a)

       --help display this help and exit

       --version
              output version information and exit
. . .
STANDARDS
       The expand and unexpand utilities conform to IEEE Std 1003.1-2001
       (``POSIX.1'').
 9ilsdx 9rvj 0lo28 сент. 2018 г., 10:37
Единственный разумный ответ. Использование perl или awk является полным излишним, если у вас есть специальная команда для него.
 Aquarius Power23 авг. 2014 г., 05:52
это сработало лучше для меняunexpand --first-only -t 2 ..., Спасибо!
 olala17 дек. 2013 г., 05:26
Я нея думаю, что расширитель будет работать здесь .. он только преобразует ведущие пробелы и только с двумя или более пробелами .. см. здесь:lists.gnu.org/archive/html/bug-textutils/2001-01/msg00025.html
 kojiro30 окт. 2013 г., 21:50
Для записи разверните / не развернитестандартные утилиты.
 Steve S.04 февр. 2015 г., 17:47
Только предостережение - при развертывании ни один пробел не будет преобразован во вкладку. Если вам нужно вслепую конвертировать все серии символов 0x20 в одну вкладку, вам нужен другой инструмент.
 Matthew Flaschen14 нояб. 2013 г., 04:26
Настолько круто, что они стандартные. Я люблюФилософия UNIX, Было бы неплохо, если бы это можно было сделать на месте.
 Daniel Howard28 июн. 2017 г., 17:18
Пример с одной строкой, как заменить пробелы на вкладки во всем каталоге. Найдите, чтобы выбрать файлы, которые вы хотите использовать (файлы php в моем случае), затем цикл bash для запуска каждого файла через нерасширенный файл, создайте временный файл с результатом, а затем переименуйте обратно в исходный. найти / путь / к / каталогу-имени '* .Php» -принт0 | пока читаешь -d '' -r имя файла; do unspand --tabs = 4 --first-only "$ Имя_файла» >  "$ Имя_файла»-notab && мв "$ Имя_файла»-нотаб "$ Имя_файла»; сделанный;
 Jon18 окт. 2013 г., 11:00
Это должен быть принятый ответ.
 Steve S.04 февр. 2015 г., 17:56
Можно'отредактируйте комментарий выше. Для меня,sed "s/ \+/\t/g" сделал свое дело.
 Ömer An30 июл. 2018 г., 14:42
у меня не работает
 Ibrahim09 янв. 2013 г., 06:43
Вау, никогда не знал, расширять / расширять существовал. Я пытался сделать наоборот, и расширение было идеальным, а не возиться сtr или же .sed
 the0ther19 окт. 2016 г., 02:34
помните, какие компьютеры были на заре компьютеризации @MatthewFlaschen. конечно это встроено!
 Craig McQueen29 нояб. 2013 г., 03:52
Какие'самый простой способ получитьexpand написать обратно в исходный файл? Если я попробуюexpand main.cpp > main.cpp, это стирает файл.

С помощьюPerl:

perl -p -i -e 's/ /\t/g' file.txt
 TimP06 июл. 2013 г., 16:53
Хотя, конечно, я хотел сделать наоборот: преобразовать табуляцию в два пробела:perl -p -i -e 's/\t/ /g' *.java
 Todd22 мар. 2013 г., 19:53
Была похожая проблема с заменой последовательных пробелов на одной вкладке. Perl работал работал только с добавлением «+» к регулярному выражению

Ваш ответ на вопрос