我有一个脚本,接受两个文件作为参数(run_this file1 file2
)。我有一堆文件,我选择与
ls analysis-{A,B,C}*-[123][abc].csv
对于每一个,我还需要传递对应的文件,它的名字只在前缀上有所不同:而不是analysis
,它以analysis_q
开始。我尝试了许多我知道的选项,但sed
似乎拒绝与xargs
合作(我不知道其他简单的方法)
我试过的一件事是:
ls analysis-{A,B,C}*-[123][abc].csv | xargs --interactive -I '{}' run_this `$(echo {} | sed 's/analysis/analysis_q/g')` {}
我希望制作
run_this analysis_q-A-1a.csv analysis-A-1a.csv
run_this analysis_q-A-1b.csv analysis-A-1b.csv
等等。
3条答案
按热度按时间cl25kdpy1#
只是一个普通的循环。
对于xargs,我会删除前缀,只使用变量部分。
shyt4zoc2#
像这样,使用
sed
和xargs
:当您对输出满意时,删除
echo
。输出
33qvvth13#
Bash可以很好地对变量进行搜索和替换,它被称为 * 变量扩展 * 或 * 变量替换 *:
一旦这对你有效,删除
echo
,脚本将运行。表达式${f/analysis/analysis_q}
采用$f
的值,用 analysis_q 替换 analysis。这个方法根本不使用
ls
、sed
或xargs
。它是纯bash。