我想使用空格作为cut命令的分隔符。

我可以使用什么语法呢?


当前回答

我刚刚发现你也可以使用"-d ":

cut "-d "

Test

$ cat a
hello how are you
I am fine
$ cut "-d " -f2 a
how
am

其他回答

cut -d ' ' -f 2

其中2是所需空格分隔字段的字段号。

如果数据有多个空格,你就不能简单地用cut来做。我发现规范化输入有助于简化处理。一个技巧是使用sed进行规范化,如下所示。

echo -e "foor\t \t bar" | sed 's:\s\+:\t:g' | cut -f2  #bar

我有一个答案(我承认有些令人困惑的答案),涉及正则表达式和捕获组:

\S* -第一个单词 \s* -分隔符 (\S*) -第二个词-捕获 .* -其余的行

作为sed表达式,需要转义捕获组,即\(和\)。

\1返回捕获组的副本,即第二个单词。

$ echo "alpha beta gamma delta" | sed 's/\S*\s*\(\S*\).*/\1/'
beta

当你看到这个答案时,你可能会觉得有些困惑,你可能会想,为什么要麻烦呢?好吧,我希望有些人会“啊哈!”,然后使用这个模式用一个sed表达式解决一些复杂的文本提取问题。

你也可以说:

cut -d\  -f 2

注意,反斜杠后面有两个空格。

我刚刚发现你也可以使用"-d ":

cut "-d "

Test

$ cat a
hello how are you
I am fine
$ cut "-d " -f2 a
how
am