Bash 如何跨一个目录中的所有文件处理tr并输出到另一个目录中的不同名称?
哪些产出:Bash 如何跨一个目录中的所有文件处理tr并输出到另一个目录中的不同名称?,bash,shell,directory,xargs,tr,Bash,Shell,Directory,Xargs,Tr,哪些产出: mpu3$ echo * | xargs -n 1 -I {} | tr "|" "/n" 这就是我目前所拥有的。缺少的是输出;我一个也没有。我真正想要的是得到一个txt文件列表,使用它们的名称直到扩展名,处理出“|”并用LF/CR替换它,然后将新文件作为[old name].ics放在另一个目录中。哈尔普。提前支付THX我真傻 您可以在文件上循环并使用sed处理文件: @.txt ag.txt bg.txt bh.txt bi.txt bid.txt dh.txt dw.txt
mpu3$ echo * | xargs -n 1 -I {} | tr "|" "/n"
这就是我目前所拥有的。缺少的是输出;我一个也没有。我真正想要的是得到一个txt文件列表,使用它们的名称直到扩展名,处理出“|”并用LF/CR替换它,然后将新文件作为[old name].ics放在另一个目录中。哈尔普。提前支付THX我真傻 您可以在文件上循环并使用
sed
处理文件:
@.txt
ag.txt
bg.txt
bh.txt
bi.txt
bid.txt
dh.txt
dw.txt
er.txt
ha.txt
jo.txt
kc.txt
lfr.txt
lg.txt
ng.txt
pb.txt
r-c.txt
rj.txt
rw.txt
se.txt
sh.txt
vr.txt
wa.txt
无需使用xargs
,尤其是使用echo
,这将有可能导致文件名被拆分并应用globbing,因此可能会做错误的事情
然后我们使用
sed
并使用s
将
替换为\n
g
使其成为一个全局替换。我们将其重定向到您想要的另一个控制器,并使用bash
的参数扩展从末尾剥离.txt
,这里有一个awk解决方案:
for i in *.txt; do
sed -e 's/|/\n/g' "$i" > other_directory/"${i%.txt}".ics
done
您是否试图对文件内容或文件名使用
tr
?示例输入和所需的输出将对每个文件的内容有很大帮助。我在每个文件上逐个单独使用tr没有任何问题,我只需要帮助使用xargs以自动方式将其放入。如果我使用“>”添加输出文件,则“echo*| xargs-n1-I{}tr”“”/n”我不知道如何使用xargs。请先阅读,然后再回答您的问题,以便向我们展示您正在使用的文件的示例,以及您希望在使用时显示的样子。我可以很好地阅读这些内容,谢谢。它将创建一个名为“bg.txt.ics”的文件。是吗?我如何才能以同样的方式获得扩展进程的名称?这意味着输出文件名为“bg.ics”。@usermac no,带有${I%.txt}
我们得到文件名,但最后没有.txt
,并添加.ics
,如果您不想将其放在另一个目录中,请在
Perf之后删除other\u目录/
部分。很好,很好,很好。谢谢你,我也来试试这个。我喜欢awk,因为我很少看到和使用它。
$ awk '
FNR==1 { # for first record of every file
close(f) # close previous file f
f="path_to_dir/" FILENAME # new filename with path
sub(/txt$/,"ics",f) } # replace txt with ics
{
gsub(/\|/,"\n") # replace | with \n
print > f }' *.txt # print to new file