Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何跨一个目录中的所有文件处理tr并输出到另一个目录中的不同名称?_Bash_Shell_Directory_Xargs_Tr - Fatal编程技术网

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