来自 pwd 的内容,并且 sed 无法替换内容

来自 pwd 的内容,并且 sed 无法替换内容

我有一个包含以下内容的文件:

BWA='/software/bwa/bwa-0.7.12/bwa'
SAMTOOLS='/software/samtools/samtools-1.3.1/samtools'

以上工具在我的电脑上:

  • 其中 bwa => /work/waterhouse_team/miniconda2/envs/arima/bin/bwa 和
  • pwd/hic-fq => /scratch/waterhouse_team/benth/dbg2olc-40x/hic-fq

接下来,我使用了这两个sed命令:

sed -i.bak 's|/software/bwa/bwa-0.7.12/bwa|$(which bwa)|g' mapping_arima.sh
sed -i.bak 's|/software/samtools/samtools-1.3.1/samtools|$(which samtools)|g' mapping_arima.sh

不幸的是,我收到的输出是:

BWA='$(which bwa)'
IN_DIR='$(`pwd`)/hic-fq'

我必须如何更改命令sed才能获得:

  • BWA='/work/waterhouse_team/miniconda2/envs/arima/bin/bwa' 和
  • IN_DIR=/scratch/waterhouse_team/benth/dbg2olc-40x/hic-fq

先感谢您

答案1

命令替换$(…)不会在单引号内展开。

您可以尝试:

sed -i.bak "s|/software/bwa/bwa-0.7.12/bwa|$(which bwa)|g" mapping_arima.sh
sed -i.bak "s|/software/samtools/samtools-1.3.1/samtools|$(which samtools)|g" mapping_arima.sh

但是,如果它在脚本中,请使用:

#!/bin/sh

file=mapping_arima.sh

from01='/software/bwa/bwa-0.7.12/bwa'
to01=$(which bwa)

from02='/software/samtools/samtools-1.3.1/samtools'
to02=$(which samtools)

sed -i.bak "s|$from01|$to01|g" "$file"
sed -i.bak "s|$from02|$to02|g" "$file"

答案2

您可以尝试以下命令:

sed -ri.bak "s#software/bwa/bwa-0.7.12/bwa#`which bwa`#g" mapping_arima.sh
sed -ri.bak "s#software/samtools/samtools-1.3.1/samtools#`which samtools`#g" mapping_arima.sh

相关内容