我想在自定义分隔符的字段中剪切一行:
echo "field1 field2 field3" | cut -d\ -f2
我希望field2
显示在结果中,但我什么都没得到。如何将其与cut
分开?
答案 0 :(得分:6)
问题是,有多个空间。 cut(1)
不会使分隔符崩溃。它会在遇到的第一个分隔符上拆分。
POSIX对此有所说明(强调我的):
- -f 列表
根据字段列表进行剪切,假定在文件中用分隔符分隔(请参阅-d)。应输出每个选定的字段。 输出字段应由一个字段分隔符字符分隔。除非指定了-s,否则没有字段分隔符的行应完整传递。选择输入行中不存在的字段不应该是错误。
解决方案:
-w
;这将在空格上分割(虽然非常有用,但这是非标准的;并且不可移植到GNU cut)-f 4
awk(1)
:echo "field1 field2 field3" | awk '{print $2}'
tr(1)
将所有空格折叠到一个空格:echo "field1 field2 field3" | tr -s \ | cut -d\ -f2
答案 1 :(得分:1)
您可以使用awk
:
echo "field1 field2 field3" | awk '{print $2}'
field2
因为cut
无法正确处理多个分隔符。
或者使用tr
先将多个空格截断为一个:
echo "field1 field2 field3" | tr -s ' ' | cut -d ' ' -f2
field2