命名文件或文件夹时删除字符

命名文件或文件夹时删除字符

我有一个包含多行的文本文件。在每一行中,我都有以下格式的日期:

12/2/2015
15/9/2013
08/3/2011
02/5/2005
.
.
.

我想使用一个简单的for循环为该文本文件中的每一行创建一个文件夹,如下所示:

#!/bin/bash -f
for f in $(cat ./file.txt ); do 
mkdir ${f}
done

该代码不起作用,因为我有/日期格式的字符。如何创建文件夹并同时从文件夹名称中删除该字符?所以输出文件夹名称将如下所示:

1222015
1592013
0832011
0252005
.
.
.

答案1

您可以使用这样的命令:

sed -e 's/\///g' < file.txt | xargs mkdir

sed命令将从 file.txt 中去除换行符,并且管道将针对文件中的每一行 xargs运行。mkdir

tr使用代替的等效命令(由 don_crissti 建议)sed是:

tr -d / < file.txt | xargs mkdir

答案2

我没有在 perl 等中重新发明,而是采用了您的原始代码并添加了相关部分以去除麻烦的 / 字符。

最初的 // 是用于全局替换的 bash 语法(因为我们确实有多个麻烦的 /)。

后面的/就是代表我们要替换的(/)。

最后的 / 位于我们想要替换它的内容(无)之前。

#!/bin/bash -f
for f in $(cat ./file.txt ); do
mkdir ${f////}
done

答案3

以及可能的解决方案awk

awk -F"/" '{ print $1 $2 $3; }' file | xargs mkdir

答案4

这是 bash 和 sed 的一种方法

for var in $(cat data01.txt); do  dir=$(echo $var | sed -e 's/\///g;'); mkdir -vp $dir; done

相关内容