从管道中获取字符串的前 [x] 个字符

xen*_*ide 98 command-line shell text-processing

如果我的命令输出很长(单行),但我知道我只想要输出的第一个 [x](假设是 8 个)字符,那么最简单的方法是什么?没有任何分隔符。

Ste*_*n D 133

一种方法是使用cut

 command | cut -c1-8
Run Code Online (Sandbox Code Playgroud)

这将为您提供每行输出的前 8 个字符。由于cut是 POSIX 的一部分,它很可能在大多数 Unices 上。

  • 请注意,`cut -c` 选择字符;`cut -b` 或 `head -c` 选择字节。这在某些语言环境中会有所不同(实际上,当使用 UTF-8 时)。 (5认同)

use*_*606 37

这些是仅获取前 8 个字符的其他一些方法。

command | head -c8

command | awk '{print substr($0,1,8);exit}' 

command | sed 's/^\(........\).*/\1/;q'
Run Code Online (Sandbox Code Playgroud)

如果你有 bash

var=$(command)
echo ${var:0:8}
Run Code Online (Sandbox Code Playgroud)

  • 我认为以下 sed 公式更容易阅读:`command | sed 's/\(.\{8\}\).*/\1/'` 或者如果你的 sed 支持它:`command | sed -r 's/(.{8}).*/\1/'`; 否则,+1 (2认同)
  • 好东西,但请注意,`head -c` 计算 _bytes_,而不是字符。类似地,在主要的 Awk 实现中,只有 _GNU_ awk 正确处理多字节字符 - FreeBSD Awk 和 Mawk 不能。 (2认同)

小智 11

使用参数展开的另一种线性解决方案

echo ${word:0:x}

EG: word="Hello world"
echo ${word:0:3} or echo ${word::3} 
o/p: Hel


EG.2: word="Hello world"
echo ${word:1:3}
o/p: ell
Run Code Online (Sandbox Code Playgroud)