我正在尝试使用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
答案 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
$()
中的某些空格<
并且可以直接将文件作为参数(避免使用子shell),使用周围的{}
作为变量