我想使用空格作为cut命令的分隔符。
我可以使用什么语法呢?
我想使用空格作为cut命令的分隔符。
我可以使用什么语法呢?
当前回答
你也可以说:
cut -d\ -f 2
注意,反斜杠后面有两个空格。
其他回答
通常,如果使用空格作为分隔符,则希望将多个空格视为一个空格,因为要用空格对齐一些列来解析命令的输出。(谷歌搜索把我带到了这里)
在这种情况下,单一的cut命令是不够的,你需要使用:
tr -s ' ' | cut -d ' ' -f 2
Or
awk '{print $2}'
我有一个答案(我承认有些令人困惑的答案),涉及正则表达式和捕获组:
\S* -第一个单词 \s* -分隔符 (\S*) -第二个词-捕获 .* -其余的行
作为sed表达式,需要转义捕获组,即\(和\)。
\1返回捕获组的副本,即第二个单词。
$ echo "alpha beta gamma delta" | sed 's/\S*\s*\(\S*\).*/\1/'
beta
当你看到这个答案时,你可能会觉得有些困惑,你可能会想,为什么要麻烦呢?好吧,我希望有些人会“啊哈!”,然后使用这个模式用一个sed表达式解决一些复杂的文本提取问题。
sccut,一个类似cut的实用程序(我做的更聪明但更慢),可以使用任何perl regex作为中断令牌。在空格上中断是默认的,但您也可以在多字符正则表达式、替代正则表达式等上中断。
scut -f='6 2 8 7' < input.file > output.file
因此,上面的命令将在空格上打断列,并按此顺序提取(以0为基数)cols 6 2 8 7。
你也可以说:
cut -d\ -f 2
注意,反斜杠后面有两个空格。
我刚刚发现你也可以使用"-d ":
cut "-d "
Test
$ cat a
hello how are you
I am fine
$ cut "-d " -f2 a
how
am