我有一个包含多行的文本文件。在每一行中,我都有以下格式的日期:
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