linux - 如何在没有临时文件的情况下将一些文本附加到管道

标签 linux bash shell unix pipe

我正在尝试从一个目录中获取最大版本号,其中我有一个程序的多个版本

例如,如果 ls 的输出是

something01_1.sh
something02_0.1.2.sh
something02_0.1.sh
something02_1.1.sh
something02_1.2.sh
something02_2.0.sh
something02_2.1.sh
something02_2.3.sh
something02_3.1.2.sh
something.sh

我得到的最大版本号如下 -

ls somedir | grep some_prefix | cut -d '_' -f2 | sort -t '.' -k1 -r | head -n 1

现在,如果同时我想用我在系统中已有的版本号来检查它,最好的方法是什么...

在 bash 中我得到了这个工作(如果 2.5 是当前版本)

(ls somedir | grep some_prefix | cut -d '_' -f2; echo 2.5) | sort -t '.' -k1 -r | head -n 1

还有其他正确的方法吗?

编辑:在上面的例子中,some_prefix 是 something02。

编辑:这里的实际问题是

(ls smthing; echo more) | sort 

这是将两个管道命令/程序的输出合并到第三个命令/程序的最佳方式吗?

最佳答案

我找到了解决方案。最好的方法似乎是使用流程替换。

cat <(ls smthing) <(echo more) | sort

以我的版本为例

cat <(ls somedir | grep some_prefix | cut -d '_' -f2) <(echo 2.5) | sort -t '.' -k1 -r | head -n 1

为了 future 读者的利益,我建议 - 请放弃单行的诱惑,使用 glob 作为 chepner建议。

superuser 上提出了几乎类似的问题.

关于 process substitution 的更多信息.

关于linux - 如何在没有临时文件的情况下将一些文本附加到管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15441744/

相关文章:

linux - 为什么用 fork() 和 exec() 创建的进程的 pid 最终改变了

linux - 使用文件夹权限 <= 750 的 WordPress

linux - 间接运算符 > 在 bash 中的奇怪行为

linux - awk输出不会打印到文件

shell - 如何在 Ansible playbook 中简洁地提取或合并哈希值

bash - 如何在每个 "exec"命令处执行 Docker 镜像的入口点?

linux - centos使用wget下载文件(https),​​在服务器上可用,但在本地虚拟机中停止?

linux - 如何在 expect shell 脚本中获取生成进程的退出代码?

linux - 什么(: ${foo%%bar}) mean in unix shell

python - 在 bash 中将数据粘贴在一起