9

hard tab charactersUnix シェルでドキュメント内の の数を数えたいです。

どうすればいいですか?

私は何かを試しました

grep -c \t foo

ただし、ファイル foo 内の t のカウントが得られます。

4

6 に答える 6

15

trを使用してタブを除くすべてを破棄し、次にカウントします。

< input-file tr -dc \\t | wc -c
于 2012-06-14T15:02:59.720 に答える
11

Bash では、$'...'特殊文字を指定するために次の表記法を使用します。

grep -c $'\t' foo
于 2012-06-14T15:07:17.443 に答える
4

-Pタブ文字を grepするには、perl 正規表現 (オプション) を使用します。

したがって、ファイル内のタブ文字の数をカウントするには:

grep -o -P '\t' foo | wc -l
于 2012-06-14T14:27:16.560 に答える
3

Ctrl+V+を使用すると、引用符の間にリテラル TAB 文字を挿入できますTAB

Ctrl+V一般に、接頭辞;を付けることで、任意の文字を挿入できます。Enterまたはなどの制御文字でさえCtrl+C、シェルが解釈するものです。

于 2012-06-14T14:29:02.547 に答える
1

awk をトリッキーな方法で使用できます。タブをレコード セパレータとして使用すると、タブ文字の数はレコードの総数から 1 を引いた数になります。

ntabs=$(awk 'BEGIN {RS="\t"} END {print NR-1}' foo)
于 2012-06-14T21:49:47.080 に答える
0

私が最初に考えたのは、 を使用sedしてすべての非タブ文字を取り除き、次に を使用wcして残っている文字数をカウントすることでした。

< foo.txt sed 's/[^\t]//g' | wc -c

ただし、これは改行もカウントしますが、sed行ベースであるため触れません。では、 を使っtrてすべての改行をスペースに変換して、 の 1 行にしsedます。

< foo.txt tr '\n' ' ' | sed 's/[^\t]//g' | wc -c

シェルと の実装によってはsed、 の代わりにリテラル タブを使用する必要がある場合がありますが\t、Bash と GNUsedでは上記が機能します。

于 2012-06-14T14:37:23.173 に答える