如何将一串数字直接从 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
(迅速的)>
+可能会回显为,并且输出的第一行可能会出现在同一行,如下所示Ctrl:D^D
^Dbrown 狐狸 快的 这