如何处理目录中所有文件的tr并输出到另一个目录中的其他名称?

时间:2017-07-23 17:46:11

标签: bash shell directory xargs tr

 mpu3$ echo * | xargs -n 1 -I {} | tr "|" "/n"

输出:

@.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

是我到目前为止所拥有的。缺少的是输出;我没有。我真正想要的是获取一个txt文件列表,使用他们的名称到扩展名,处理出“|”并用LF / CR替换它,并将新文件作为[old-name] .ics放在另一个目录中。 HALP。 THX提前。 - 白痴我

2 个答案:

答案 0 :(得分:0)

您可以遍历文件并使用sed来处理文件:

for i in *.txt; do
    sed -e 's/|/\n/g' "$i" > other_directory/"${i%.txt}".ics
done

无需使用xargs,尤其是使用echo会导致文件名出现分词并对其进行分组处理的风险,因此可能会做错事。

然后我们使用sed并使用s替换| \n g使其成为全局替换。我们将其重定向到您想要的其他导演,并使用bash的参数展开从最后剥离.txt

答案 1 :(得分:0)

这是一个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