Você pode tentar esses comandos:
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
Eu tenho um arquivo com o seguinte conteúdo:
BWA='/software/bwa/bwa-0.7.12/bwa'
SAMTOOLS='/software/samtools/samtools-1.3.1/samtools'
As ferramentas acima estão no meu computador:
pwd
/ hic-fq = > / scratch / waterhouse_team / benth / dbg2olc-40x / hic-fq Em seguida, usei esses dois comandos 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
Infelizmente, como resultado, recebi:
BWA='$(which bwa)'
IN_DIR='$('pwd')/hic-fq'
Como preciso alterar os comandos sed
para obter:
Obrigado antecipadamente
As substituições de comandos $(…)
não são expandidas dentro de aspas simples.
Você pode tentar:
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
Mas, se estiver em um script, use:
#!/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"