You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用多输入流时GNU Parallel中的字符串替换问题

GNU Parallel 特定输入流替换与预定义替换串复用技巧

1. 仅对多输入流中的特定输入应用自定义替换

在多输入流场景下(比如用:::+分隔的多个输入集合),不想让--rpl定义的替换规则全局作用于所有输入流时,只需将自定义替换规则与指定的输入占位符绑定即可。

比如你原本的基础命令:

parallel echo "First name: {1}, Last name: {2}" ::: John Jane :::+ Doe Smith

若要仅对第2个输入流(姓氏)应用自定义替换,直接在{2}后附加替换规则,或通过--rpl定义规则后指定仅第2个流使用即可:

示例:定义一个文本转大写的替换规则,仅作用于姓氏:

parallel --rpl '{uc s/(.*)/\U$1/}' echo "First name: {1}, Last name: {2 uc}" ::: John Jane :::+ Doe Smith

输出结果:

First name: John, Last name: DOE
First name: Jane, Last name: SMITH

这种{N 替换规则名}的写法,能精准指定替换仅作用于第N个输入流,不会影响其他流的内容。

2. 基于预定义替换串(如{/})做自定义替换

完全可以基于GNU Parallel的预定义替换结果(比如{/}提取文件名、{.}提取无后缀文件名等)做二次替换,有两种实现方式:

方式一:直接嵌套替换规则

无需单独定义--rpl,直接在预定义占位符后附加Perl替换规则:

ls -1 /home/user/*_non-important.txt | parallel echo "{/ s:_non-important.txt::}"

这条命令会先通过{/}提取文件名(去掉路径),再去掉_non-important.txt后缀,输出仅保留核心文件名。

方式二:通过--rpl复用自定义规则

如果需要重复使用该替换规则,可以用--rpl定义,在规则中先引用预定义替换的结果:

ls -1 /home/user/*_non-important.txt | parallel --rpl '{mybasename} $_=q{/}; s:_non-important.txt::' echo "{mybasename}"

其中$_=q{/}会先将当前输入转换为{/}的处理结果,再执行后续的替换操作,最终实现和嵌套写法一致的效果。

内容的提问来源于stack exchange,提问作者IsoBar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 12:03:31