SED目录创建出错

时间:2014-11-06 15:51:56

标签: bash sed cat

我正在尝试使用SED创建一系列目录,这些目录都包含同名文件,但每个目录中的每个文件都会有一行变化。

for i in $( cat ~/SCRIPTS/AALIST.txt);  do

mkdir ~/jan10/25

sed -e "s/HAT/${i}/"  <~/SCRIPTS/HAT25.inp > ~/jan10/25/25$i/mat.inp

AALIST.txt只是一个包含有效的文件..

A
B
C
D
E

HAT25.inp有很多行文本,然后是第25行的“HAT”这个词,这个HAT应该替换为A,B,C等。在目录25中,SED应该创建名为25A的目录这些目录中应该是原始的HAT25.inp文件,其中HAT替换为父目录的字母。这样,我的意思是目录25A应该包含HAT.inp重命名为mat.inp并且在第25行包含A,而不是HAT。不幸的是,当我尝试执行上面的代码时,我收到错误:

cannot create directory `/home/user/jan10/25': File exists
./loop.sh: line 23: /home/user/jan10/25/25$i/mat.inp: No such file or directory

对于我做错了什么有任何见解,我无法确定我所犯的错误。

编辑:

通过注释掉mkdir行,我现在收到以下错误。创建目录“25”,但不创建目录25A,25B等。收到的错误如下。

./loop.sh: line 23: /home/user/jan10/25/25A/mat.inp: No such file or directory

1 个答案:

答案 0 :(得分:1)

for i in $( cat ~/SCRIPTS/AALIST.txt )
 do

   NewFolder=~/jan10/25/25${i}
   mkdir "${NewFolder}"

   sed -e "s/HAT/${i}/" ~/SCRIPTS/HAT25.inp > "${NewFolder}/mat.inp"

done
  • 您的代码缺少一些信息(循环结束,创建时的文件夹结束名称以及$()中的某些空格
  • 一些Enhancemnet(sed不需要<并且可以直接将文件作为参数(避免使用子shell),使用周围的{}作为变量