我想使用空格作为cut命令的定界符。
我可以使用什么语法?
man页面不够用。让我们来看看:“ -d delim使用delim作为字段分隔符,而不是制表符。” (BSD cut,但GNU版本和POSIX规范几乎相同)。使用外壳来调用cut-典型案例-因此需要你知道如何通常通过一个空间使用参数shell语法,这无疑不是cut男人页的工作。实际示例总是有帮助的,但是,GNU手册页缺少它们。
我想使用空格作为cut命令的定界符。
我可以使用什么语法?
man页面不够用。让我们来看看:“ -d delim使用delim作为字段分隔符,而不是制表符。” (BSD cut,但GNU版本和POSIX规范几乎相同)。使用外壳来调用cut-典型案例-因此需要你知道如何通常通过一个空间使用参数shell语法,这无疑不是cut男人页的工作。实际示例总是有帮助的,但是,GNU手册页缺少它们。
Answers:
cut -d ' ' -f 2
其中2是所需的以空格分隔的字段的字段号。
cut -d ' ' -f 3,6,9,12,15,18而不必指定每一个数字?
补充现有的,有用的答案;帽子给小费QZ支持鼓励我发布一个单独的答案:
两种不同的机制在这里起作用:
(a)cut 本身是否要求传递给-d选项的定界符(在这种情况下为空格)是一个单独的参数,或者是否可以将其直接附加到-d。
(b)shell在将参数传递给被调用的命令之前通常如何解析参数。
(a)由POSIX公用事业指南(强调我的)引述
如果标准实用程序的摘要显示带有强制性选项参数的选项,则符合标准的应用程序应对该选项及其选项参数使用单独的参数。然而,一个符合标准的实现应还允许应用程序指定同一参数串的选项,选项参数中间没有字符。
换句话说:在这种情况下,因为-d的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视为自己的参数,然后是包含空格字符的单独参数-不带引号或\前缀!
(d) :cut看到-d 加一个空格字符-不带引号或\前缀!-作为相同论点的一部分。
各个组中的形式最终相同的原因是双重的,这取决于外壳如何解析字符串文字:
'...'取字面,并形成一个单一的参数"..."也形成单个参数,但可以进行插值(扩展变量引用,例如$var,命令替换($(...)或`...`)或算术扩展($(( ... )))。\的-quoting 个别字符:一个\单个字符之前使该字符被解释为一个文字。'...'或"..."或\实例) -从而,该命令被调用不会看到引号字符。您还可以说:
cut -d\ -f 2
请注意,反斜杠后面有两个空格。
\ 是我的第一次尝试,并且有效。我同意与相比' ',它不那么明显,但是我敢肯定,很多人很高兴在这里阅读它,以确保行为安全。为了更好的理解,请参阅下面的@ mklement0评论。
'-d '。