如何在BASH中用“ cut”定义“ tab”定界符?


Answers:


300

两种方式:

Ctrl+ V,然后按Tab

cut -f2 -d'   ' infile

或这样写:

cut -f2 -d$'\t' infile

10
$''— bash'ism,AFAIR
poige 2012年

8
显然,它们都不在Windows中工作(例如,Git Bash)。在此处使用@Mikel的答案(默认定界符为tab,只需忽略-d参数)。
Ahmed Fasih 2014年


4
@poige,来自ksh93,不是bash。至少由ksh93,zsh,bash,mksh和FreeBSD sh支持(这可能会使其成为POSIX标准规范的下一个主要版本sh)。
斯特凡Chazelas


190

Tab是默认选项。

请参见裁切手册页

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

所以你应该写

cut -f 2

2
糟糕,没有注意到那条线。
穆罕默德·哈桑·汗

4
但是出于可读性和可移植性,显式地提及此类标志可能总是更安全。我可以想象有些cut为Windows 设计的人不会遵循完整的标准。
Willem Van Onsem

3
这应该被接受的答案:最简单的代码,最简单的解释。ya钉上它:youtube.com/watch?
v

5
这个答案改变了我的生活
matheeeny

1
@WillemVanOnsem,如果有人cut为Windows 编写了一个版本,并且没有遵循POSIX规范,则没有理由假定任何 POSIX脚本都可以在该系统上运行。坚持使用POSIX指定的功能。不要试图允许假设的未来不合规的实现;那不是“可移植性”的意思。
通配符

12
awk -F '\t' '{ print $2 }' inputfile

这将从中提取输入的每一行的第二个制表符分隔字段inputfile


10

更笼统地说,不需要任何不可见的字符:tr用于将定界符转换为更容易指定为的格式cut

$ echo -e "a\tb\tc" |tr '\t' ' ' |cut -d' ' -f2
b

tr 是一个简单但功能强大的字符匹配和替换工具。


1
但是,如果输入是abc(space)def(tab)ghi什么呢?您的答案会产生作用def,但应该产生作用ghi。同样,如果输入为ABC(tab)DEF(space)GHI,则您的答案将产生DEF,但应该产生DEF(space)GHI
G-Man

@ G-Man:空格分隔符只是一个例子。使用适合您数据的定界符-例如逗号。 echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
nobar

...但是,是的,如果定界符必须是制表符,那么我的方法将行不通。
nobar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.