この場合、なぜcut -d ''が空白で動作しないのですか?

この場合、なぜcut -d ''が空白で動作しないのですか?

このコマンドには問題はありませんcut

wolf@linux:~$ echo ab cd ef
ab cd ef

wolf@linux:~$ echo ab cd ef | cut -d ' ' -f 1
ab

wolf@linux:~$ echo ab cd ef | cut -d ' ' -f 2
cd

ただし、別の入力で同じコマンドを試しても、期待した出力は出ません。

wolf@linux:~$ ip address show eth0 | grep 'inet '
    inet 10.10.10.10/24 brd 10.10.10.255 scope global dynamic eth0

wolf@linux:~$ ip address show eth0 | grep 'inet ' | cut -d ' ' -f 1

wolf@linux:~$ ip address show eth0 | grep 'inet ' | cut -d ' ' -f 2

2番目の例の問題は何ですか?

awk奇妙なことに、同じ入力が問題なく動作するようです。

wolf@linux:~$ ip address show eth0 | awk '/inet / {print $1}'
inet

wolf@linux:~$ ip address show eth0 | awk '/inet / {print $2}'
10.10.10.10/24

ベストアンサー1

cut連続した空白があっても、各区切り文字には意味があります。これはawkスペースに分割するデフォルト値とは異なりますが、複数のスペースを1つの区切り文字として扱い、先行スペースを無視します。

フィールド区切り文字を次のように設定して、FSawkを同様に機能させることができます[ ]

$ ip add show lo | awk -F'[ ]' '$5 == "inet" {print $6}'
127.0.0.1/8

FS単一の空白自体がデフォルトの特殊操作を表示するため、正規表現のように設定する必要があります。

たとえば、GNU awkのマニュアルでは、次のように言います。フィールド区切り文字で

おすすめ記事