我尝试使用bash脚本替换文件的路径行(test.txt)。 test.txt文件中包含的路径如下:
setwd("/media/data/myfolder")
我的bash脚本是:
WORKDIR=$(dirname $(readlink -e $0))
mkdir -p "$WORKDIR/R_results"
outdir="$WORKDIR/R_results"
sed -e 's/^setwd.*/setwd("$outdir")/g' test.txt > test2.txt
当我运行它时,我的输出是:
setwd("$outdir")
我尝试了几种双引号和单引号的组合,但我找不到正确的方法。我希望我已经清楚了。
谢谢!
答案 0 :(得分:1)
变量也不会在单引号内展开,因此您需要将sed
更改为
sed -e "s,^setwd.*,setwd($outdir),g" test.txt > test2.txt
注意,如果$ outdir包含逗号,则会失败。
答案 1 :(得分:0)
由于替换路径包含斜杠,sed
与s///
命令的开始和停止位置混淆。使用其他字符,例如%
或 Control-A 。您还需要在脚本周围使用双引号,因为您希望在其中展开shell变量。
WORKDIR=$(dirname $(readlink -e $0))
mkdir -p "$WORKDIR/R_results"
outdir="$WORKDIR/R_results"
sed -e "s%^setwd.*%setwd(\"$outdir\")%g" test.txt > test2.txt
(使用%
- 或 Control-A 来实现 - 假设所选字符不会出现在您的文件名中。)