如何将数字列表直接从 shell 传送到命令中?

如何将数字列表直接从 shell 传送到命令中?

如何将一串数字直接从 shell 导入到命令中?例如像这样

[1,2,3,4] | sort

会给

1
2
3 
4

编辑:

回应迄今为止发布的善意答案。。。我之所以问这个问题,是因为我想快速测试和调试一个控制台应用程序,该应用程序在输入时需要许多数字,而不必键入大量单独的值,然后按回车键。我只想输入“一行”,然后不时点击向上箭头以重播命令。理想情况下,我想在不使用包含值的文本文件的情况下执行此操作(这显然是最简单的方法。)

答案1

我假设我们使用个位数——在这种情况下echo 1 2 4 3 | grep -o [1234567890]|sort应该可以解决问题。我认为如果是多位数字,您必须调整 grep 的正则表达式。

grep -o 根据正则表达式选择并每行打印一个

编辑:还有一个更优雅的解决方案。

我们仍然使用 echo,但使用 tr。这适用于大于一位数的数字

echo 10,2,4,3|tr ',' '\n'|sort -g

tr 被告知用换行符替换逗号,并且 sort -g 按数字顺序排序(假设这是您想要的排序)。

假设你需要列表中的方括号由于某些奇怪的原因,你可以用

echo [10,2,4,3]|tr '[:punct:]' ' '|tr ' ' '\n'|sort -g

附加的 tr 命令用空格替换任何标点符号。

答案2

<<您可以使用内联 i/o 重定向运算符来使用“here”文档。shell 会查找您提供的任何标记(在本例中eof为 )作为 here 文档的文件结束标记。

sort << eof
1
2
3
4
eof

另一种方式是迭代这些值,echo并对其进行排序:

for i in 1 2 3 4; do echo $i; done | sort

如果您希望for将循环打包为命令,请使用以下过程:

list() for i in $*; do echo $i; done
list 1 2 3 4 | sort

答案3

$ printf '%d\n' 1 3 2 4 | sort
1
2
3
4

或者

$ echo $'1\n2\n4\n3' | sort
1
2
3
4

答案4

“超级简单”的答案:输入命令,然后输入。(严格来说,这不是管道。“管道”一词在 I/O 重定向方面被过度使用,这甚至不是 I/O 重定向,它只是标准 I/O。)以Ctrl+结尾D(假设您使用的是某种形式的 *nix 或类似 Unix 的东西,并且您没有更改 EOF 字符)。例如:

(迅速的)> +sort –f
The
quick
brown
fox

CtrlD
brown
fox
quick
The

(迅速的)>

+可能会回显为,并且输出的第一行可能会出现在同一行,如下所示CtrlD^D

^Dbrown
狐狸
快的

相关内容