web-dev-qa-db-ja.com

Linuxで空白をタブに置き換える

特定のテキストファイルでLinuxの空白をタブに置き換えるにはどうすればよいですか?

92
biznez

Unexpand(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'').
161
DigitalRoss

私はあなたがawkで試すことができると思う

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

優先する場合はSED

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

またはtr

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

またはSam Bisbeeによって提案されたtrソリューションの簡易バージョン

tr ' ' \\t < someFile > someFile
40
Jonathan

Perlを使用:

Perl -p -i -e 's/ /\t/g' file.txt
9
John Millikin

より良いtrコマンド:

tr [:blank:] \\t

これにより、たとえばnzip -lの出力がクリーンアップされ、grep、cutなどでさらに処理されます。

例えば。、

unzip -l some-jars-and-textfiles.Zip | tr [:blank:] \\t | cut -f 5 | grep jar
9
Tarkin

次のスクリプトをダウンロードして実行し、プレーンテキストファイルのソフトタブをハードタブに再帰的に変換します。

プレーンテキストファイルを含むフォルダー内からスクリプトを配置して実行します。

#!/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;
3
daka

現在のディレクトリにある各.jsファイルをタブに変換するコマンドの例(先頭のスペースのみが変換されます):

find . -name "*.js" -exec bash -c 'unexpand -t 4 --first-only "$0" > /tmp/totabbuff && mv /tmp/totabbuff "$0"' {} \;
2
arkod

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.`
1
abc

これにより、連続するスペースが1つのスペースに置き換えられます(タブは置き換えられません)。

    tr -cs '[:space:]'
0
mel