如何在 shell 脚本中创建以逗号分隔的文件名字符串?
How to create a string of filenames separated by comma in shell script?
我正在尝试创建一个字符串,例如 (file1.txt、file2.txt、file3.txt)。
这 3 个文件名都在一个文件中。
ls file*.txt > lstfiles.txt
while read filename; do
filename+=$line","
done <lstfiles.txt
这个returns我输出:
file1.txt,file2.txt,file3.txt,
如何找到循环的最后一次迭代,这样我就不会在末尾添加另一个逗号。
所需输出:
file1.txt,file2.txt,file3.txt
对于您的用例,我宁愿摆脱 while 循环并组合 sed
和 tr
命令,如下所示:
sed -e '$ ! s/$/,/g' lstfiles.txt | tr -d '\n'
其中 sed
命令用逗号替换除最后一行以外的每一行结尾,tr
命令删除换行符。
虽然可能avoid using ls
in scripts。
printf '%s,' file*.txt |
sed 's/,$/\n/'
假设您的 sed
将 \n
识别为换行符,并处理没有最终换行符的输入。
我正在尝试创建一个字符串,例如 (file1.txt、file2.txt、file3.txt)。 这 3 个文件名都在一个文件中。
ls file*.txt > lstfiles.txt
while read filename; do
filename+=$line","
done <lstfiles.txt
这个returns我输出:
file1.txt,file2.txt,file3.txt,
如何找到循环的最后一次迭代,这样我就不会在末尾添加另一个逗号。
所需输出:
file1.txt,file2.txt,file3.txt
对于您的用例,我宁愿摆脱 while 循环并组合 sed
和 tr
命令,如下所示:
sed -e '$ ! s/$/,/g' lstfiles.txt | tr -d '\n'
其中 sed
命令用逗号替换除最后一行以外的每一行结尾,tr
命令删除换行符。
虽然可能avoid using ls
in scripts。
printf '%s,' file*.txt |
sed 's/,$/\n/'
假设您的 sed
将 \n
识别为换行符,并处理没有最终换行符的输入。