Bash子串与管道和标准输入

时间:2012-01-10 19:34:15

标签: bash

我的目标是将命令的输出减少到任意数量的字符(让我们使用 6 )。我希望能够将此命令附加到管道的末尾,因此它应该能够使用stdin。

echo "1234567890" | your command here 
# desired output: 123456

我检查了awk,我也注意到bash有一个substr命令,但我提出的两个解决方案似乎都比他们需要的更长,我无法动摇感觉我错过了一些更容易的东西。

我会发布我发现的两个解决方案作为答案,我欢迎任何批评以及新的解决方案!


找到解决方案,谢谢所有回复的人!

jcollado和Mithrandir之间很接近 - 我将来最终可能会同时使用它们。 Mithrandir的答案是一个实际的子字符串,更容易查看结果,但jcollado的答案让我把它管道到剪贴板,没有EOL字符。

5 个答案:

答案 0 :(得分:22)

你想要这样的东西:

echo "1234567890" | cut -b 1-6

答案 1 :(得分:3)

如何使用head -c/--bytes

$ echo t9p8uat4ep | head -c 6
t9p8ua

答案 2 :(得分:3)

我想出了:

echo "1234567890" | ( read h; echo ${h:0:6} )

echo "1234567890" | awk '{print substr($0,1,6)}'

但两人似乎都在用大锤敲打钉子。

答案 3 :(得分:2)

这可能对您有用:

printf "%.6s" 1234567890
123456

答案 4 :(得分:0)

如果your_command_herecat

% OUTPUT=t9p8uat4ep
% cat <<<${OUTPUT:0:6}
t9p8ua