Ric*_*dle 335
cut -d ' ' -f 2
Run Code Online (Sandbox Code Playgroud)
其中2是您想要的以空格分隔的字段的字段编号.
Ben*_*ela 153
通常,如果使用空格作为分隔符,则需要将多个空格视为一个空格,因为您解析命令的输出,将某些列与空格对齐.(以及google搜索引导我来到这里)
在这种情况下,单个cut
命令是不够的,您需要使用:
tr -s ' ' | cut -d ' ' -f 2
Run Code Online (Sandbox Code Playgroud)
要么
awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
mkl*_*nt0 40
补充现有的,有用的答案; 帽子的尖端QZ支持鼓励我发布一个单独的答案:
这里有两种截然不同的机制:
(a)cut
本身是否要求将分隔符(在这种情况下为空格)传递给-d
选项作为单独的参数,或者是否可以将其直接附加到-d
.
(b)shell在将参数传递给被调用的命令之前通常如何解析参数.
(a)通过POSIX公用事业指南的引用回答(强调我的)
如果标准实用程序的SYNOPSIS显示带有强制选项参数[...]的选项,则符合条件的应用程序应对该选项及其选项参数使用单独的参数.然而,一个符合标准的实现应还允许应用程序指定同一参数串的选项,选项参数中间没有字符.
换句话说:在这种情况下,因为-d
's option-argument是必需的,所以您可以选择是否将分隔符指定为:
-d
.一旦你选择了(s)或(d),它就是shell的字符串 - 字面解析 - (b) - 这很重要:
随着办法(S) ,以下所有形式是等价的:
-d ' '
-d " "
-d \<space> # <space> used to represent an actual space for technical reasons
使用方法(d),以下所有形式都是等价的:
-d' '
-d" "
"-d "
'-d '
d\<space>
shell的字符串文字处理解释了等价:
上面的cut
所有解决方案在看到它们时产生完全相同的字符串(在每个组中):
(s):cut
看到-d
,作为它自己的参数,后跟一个包含空格char 的单独参数 - 没有引号或\
前缀!
(d):cut
看到-d
加上空格char - 没有引号或\
前缀!- 作为同一论点的一部分.
其原因在各组的形式是最终相同是双重的,基于所述如何壳解析字符串文字:
'...'
取字面,并形成一个单一的参数"..."
也形成一个单一的参数,但受到插值(扩大变量引用如$var
,命令取代($(...)
或`...`
),或算术扩展($(( ... ))
).\
- 单个字符的引用:\
前面的单个字符会导致该字符被解释为文字.'...'
或"..."
或\
由此, -实例)该命令被调用从未看到引号字符.Cha*_*ens 35
你也可以说
cut -d\ -f 2
Run Code Online (Sandbox Code Playgroud)
请注意反斜杠后有两个空格.
我刚刚发现你也可以使用"-d "
:
cut "-d "
Run Code Online (Sandbox Code Playgroud)
$ cat a
hello how are you
I am fine
$ cut "-d " -f2 a
how
am
Run Code Online (Sandbox Code Playgroud)
如果数据有多个空格,你就不能用 cut 轻松地做到这一点。我发现标准化输入以便于处理很有用。一个技巧是使用 sed 进行标准化,如下所示。
echo -e "foor\t \t bar" | sed 's:\s\+:\t:g' | cut -f2 #bar
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
288638 次 |
最近记录: |