我想用自定义分隔符将一行划分为字段:
echo "field1 field2 field3" | cut -d\ -f2
Run Code Online (Sandbox Code Playgroud)
我期望field2在结果中显示,但我什么都没得到.我该如何拆分cut?
问题是,有多个空间.cut(1)不会破坏分隔符.它将在遇到的第一个分隔符上拆分.
POSIX对此有所说明(强调我的):
- -f list
基于字段列表进行剪切,假定在文件中用分隔符分隔(请参阅-d).应输出每个选定的字段.输出字段应由一次出现的字段分隔符字符分隔.除非指定-s,否则没有字段分隔符的行应完整传递.选择输入行中不存在的字段不应该是错误.
解决方案:
-w; 这将在空格上分割(虽然非常有用,但这是非标准的;并且不能移植到GNU剪切)-f 4awk(1):echo "field1 field2 field3" | awk '{print $2}'tr(1)将所有空格折叠到单个空格:echo "field1 field2 field3" | tr -s \ | cut -d\ -f2