SED命令:如何-i和-e工作

时间:2016-05-09 22:34:34

标签: unix sed sh

我第一次使用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

1 个答案:

答案 0 :(得分:2)

您使用的是BSD(OSX)。

-i告诉sed使用创建备份文件的选项来更改文件。对于BSD sed,与GNU(Linux)sed不同,-i选项需要参数。参数指定用于备份文件的后缀。如果您不想要备份文件,请使用sed -i '' -e ...。空参数''告诉BSD sed不要保存备份。

换句话说,在您的情况下,sed -i -e ...命令被解释为为备份文件指定-e后缀。如果您不想备份,请使用sed -i '' -e ...