hard tab characters
Unix シェルでドキュメント内の の数を数えたいです。
どうすればいいですか?
私は何かを試しました
grep -c \t foo
ただし、ファイル foo 内の t のカウントが得られます。
trを使用してタブを除くすべてを破棄し、次にカウントします。
< input-file tr -dc \\t | wc -c
Bash では、$'...'
特殊文字を指定するために次の表記法を使用します。
grep -c $'\t' foo
-P
タブ文字を grepするには、perl 正規表現 (オプション) を使用します。
したがって、ファイル内のタブ文字の数をカウントするには:
grep -o -P '\t' foo | wc -l
Ctrl+V+を使用すると、引用符の間にリテラル TAB 文字を挿入できますTAB。
Ctrl+V一般に、接頭辞;を付けることで、任意の文字を挿入できます。Enterまたはなどの制御文字でさえCtrl+C、シェルが解釈するものです。
awk をトリッキーな方法で使用できます。タブをレコード セパレータとして使用すると、タブ文字の数はレコードの総数から 1 を引いた数になります。
ntabs=$(awk 'BEGIN {RS="\t"} END {print NR-1}' foo)
私が最初に考えたのは、 を使用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
では上記が機能します。