使用 sed 并行替换特定于行的字符串时出现语法错误:{= s/_1/_2/ =}?

使用 sed 并行替换特定于行的字符串时出现语法错误:{= s/_1/_2/ =}?

我有一个包含如下文件的目录:

id1_1.txt
id1_2.txt
id2_1.txt
id2_2.txt

我需要将这些文件作为一对(例如id1_1.txtid1_2.txt)传递给my_script.

这是我认为可行的

parallel -j +0 -X python my_script.py -1 {} -2 {= s/_1/_2/ =} -o /output/dir/good /output/dir/bad ::: /my/dir/*_1.txt

其中-1是以 结尾的文件_1.txt,以及-2以 结尾的文件_2.txt

my_script识别 option 的输入-1,但不识别 option 的输入-2。显然,它只是寻找 option 的初始部分-2

 No such file or directory: '{='

我尝试添加引号,但仍然出现相同的错误。

并行版本:

$ parallel --version
GNU parallel 20120522
Copyright (C) 2007,2008,2009,2010,2011,2012 Ole Tange and Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
GNU parallel comes with no warranty.

Web site: http://www.gnu.org/software/parallel

When using GNU Parallel for a publication please cite:

O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47.

答案1

正如steeldriver指出的,我安装的parallel版本早于我正在使用的synatx(GNU 并行 - 新闻)。

作为旁注,GNU 并行索引在顶部列出最旧的版本,在底部列出最新版本。当我在新工作区下载并行时,我没有注意到这一点并抓住了顶部的 .tar 以为它是最新版本。

相关内容