从命令行读取文件中的文件名

用户名

我想运行一个需要用逗号分隔的文件数组的程序,如下所示:

program -input1 A.txt,B.txt,C.txt -input2 D.txt,E.txt,F.txt -out out.txt

我的重击尝试:

我正在从名为ProgramFolder的文件夹运行命令,该文件夹还包含file1.txt和file2.txt。file1.txt和file2.txt包含该程序的文件名,例如:

File1:
A.txt,B.txt,C.txt


File2:
D.txt,E.txt,F.txt

但是“ A.txt,B.txt,C.txt”和“ D.txt,E.txt,F.txt”位于不同的文件夹中:源1和源2,如下所示。

## file sources
source1= ~/Band/folder1/
source2= ~/Band/folder1/

我曾尝试以这种方式运行该程序,但未成功:

program -input $source1$(cat file1.txt) -input2 $source2$(cat file2.txt) -out out.txt

为运行程序编写bash的最佳方法是什么?

科斯

您可以sed在两个命令替换内使用原始命令,以在程序参数中列出原始文件之前对其进行处理(感谢steeldriver提供了简化模式):

program -input "$(sed "s@^\|,@&$source1@g" file1.txt)" -input2 "$(sed "s@^\|,@&$source2@g" file2.txt)"

我将sed命令的默认定界符(/更改为@因为$source1$source2都将扩展为包含/;的路径尽管如此,|还是需要交替进行的。

sed 命令细目:

  • s:断言执行替换
  • @:开始模式
  • ^\|,:匹配行的开头或,字符
  • @:停止模式/开始替换字符串
  • &:后向引用,它将扩展为匹配项
  • $sourceN:扩展到以下内容 $sourceN
  • @:停止替换字符串/启动修饰符
  • g:替换该行中的所有匹配项

所述的样本输出sed对于给定值的命令$source1$source2以及用于给定内容file1.txtfile2.txt

user@debian ~/tmp % echo $source1
~/Band/folder1/
user@debian ~/tmp % echo $source2
~/Band/folder2/
user@debian ~/tmp % cat file1.txt 
A.txt,B.txt,C.txt
user@debian ~/tmp % cat file2.txt 
D.txt,E.txt,F.txt
user@debian ~/tmp % sed "s@^\|,@&$source1@g" file1.txt
~/Band/folder1/A.txt,~/Band/folder1/B.txt,~/Band/folder1/C.txt
user@debian ~/tmp % sed "s@^\|,@&$source2@g" file2.txt
~/Band/folder2/D.txt,~/Band/folder2/E.txt,~/Band/folder2/F.txt

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章