BASHで「カット」で「タブ」区切り文字を定義するにはどうすればよいですか?


215

cutスペース区切り文字を使用して入力をフィールドに分割し、2番目のフィールドを取得する例を次に示します。

cut -f2 -d' '

区切り文字をスペースではなくタブとして定義するにはどうすればよいですか?



4
タブはデフォルトの区切り文字です。カット-f 2
メラ

回答:


301

二つの方法:

Ctrl+ Vを押してからを押しTabます。

cut -f2 -d'   ' infile

または、次のように記述します。

cut -f2 -d$'\t' infile

10
$ '' — bash'ism、AFAIR
poige

8
どちらもWindows(Git Bashなど)で動作しないことは明らかです。そこで@Mikelの回答を使用します(デフォルトの区切り文字はタブで、-d引数を省略します)。
アーメドファシィ


4
@poige、それはからksh93ではなく、から来ていbashます。これは、少なくともksh93、zsh、bash、mksh、およびFreeBSD shでサポートされています(次のPOSIX標準仕様の次のshメジャーリバージョンになる可能性があります)。
ステファンシャゼラス


191

タブがデフォルトです。

カットのマニュアルページを参照してください

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

だからあなたはただ書くべきです

cut -f 2

2
おっと、その行に気付きませんでした。
ムハンマドハサンカーン

4
ただし、読みやすさと移植性の両方を考慮して、このようなフラグを明示的に指定する方が常に安全です。cutWindows用に設計する一部の人々は完全な標準に従わないと想像できます。
ウィレムヴァンOnsem

3
これは受け入れられる答えです:最も単純なコード、最も単純な説明。ya釘付け:youtube.com/watch
v

5
この答えは私の人生を変えました
-matheeeny

1
誰かがのバージョンを書き込むと@WillemVanOnsemは、cutWindows用と続かないPOSIX仕様それのために、と仮定する理由はありません任意の POSIXスクリプトは、そのシステムで動作します。POSIX指定の機能に固執します。架空の将来の非準拠の実装を許可しようとしないでください。それは「携帯性」の意味ではありません。
ワイルドカード

12
awk -F '\t' '{ print $2 }' inputfile

これにより、入力の各行の2番目のタブ区切りフィールドがから抽出されinputfileます。


10

より一般的には、目に見えない文字を必要とせず:tr区切り文字を、より簡単に指定できる形式に変換するために使用しますcut

$ echo -e "a\tb\tc" |tr '\t' ' ' |cut -d' ' -f2
b

tr は、シンプルですが強力な文字マッチングおよび置換ツールです。


1
しかし、入力がabc(space)def(tab)ghiどうなるのでしょうか?あなたの答えは得られますが、得られるdefはずghiです。同様に、入力がのABC(tab)DEF(space)GHI場合、答えはになりますDEFが、になるはずDEF(space)GHIです。
G-Man

@ G-Man:スペース区切り文字は単なる例です。データに適した区切り文字(たとえばコンマ)を使用します。 echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
nobar

...しかし、はい、区切り文字がタブでなければならない場合、私のアプローチは機能しません。
nobar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.