我第一次使用sed命令尝试将一个文件替换为txt / fsf文件中的另一个文件。有人可以帮我理解-i和-e在这里工作的方式吗?
使用我的代码,我正在遍历各种文件夹,并将文件复制并存档到每个文件夹并重命名标题。 似乎当我省略-e时,我在sed命令中得到错误不起作用。但是,使用此当前代码,cp命令正常工作,直到我添加sed行。现在cp命令每个文件夹输出两个文件$ {i} _design.fsf和$ {i} _design.fsf-e
我不确定-e文件是什么。该文件似乎与原始的design.fsf文件相同。这与sed命令有关吗?
#!/bin/sh
#
Folders=(CONTROL GROUP1 GROUP2)
SC=(CPAKS_02 CPAKS_03 CPAKS_04 CPAKS_05 CPAKS_06 CPAKS_07)
data_source=/Users/sheena/Desktop/test
cd ${data_source}
for j in ${Folders[@]}; do
for i in ${SC[@]}; do
cd ${data_source}/${j}/${i}
cp ${data_source}/design.fsf ${data_source}/${j}/${i}/${i}_design.fsf
for k in ${i}_design.fsf; do
sed -i -e 's,'/Users/sheena/Desktop/DTI/CPAKS_03/fmri','${data_source}/${j}/${i}/${i}_fmri.nii',' ${i}_design.fsf
done
done
done
答案 0 :(得分:2)
您使用的是BSD(OSX)。
-i
告诉sed使用创建备份文件的选项来更改文件。对于BSD sed
,与GNU(Linux)sed
不同,-i
选项需要参数。参数指定用于备份文件的后缀。如果您不想要备份文件,请使用sed -i '' -e ...
。空参数''
告诉BSD sed
不要保存备份。
换句话说,在您的情况下,sed -i -e ...
命令被解释为为备份文件指定-e
后缀。如果您不想备份,请使用sed -i '' -e ...