使用函数中的sed命令调用和更改文件

时间:2014-06-13 08:19:41

标签: bash shell sed

您好我已经在shell函数中包装了一个sed命令(它可以自己运行)。

#!/bin/bash

snp2fasta() { 
sed -i "s/^\(.\{'$2'\}\)./\1'$3'/" $1; 
}

并用

调用它
$ ./snp2fasta input.txt 45 A

没有对input.txt进行任何更改

但是,如果我只是做

$ sed -i 's/^\(.\{45\}\)./\1A/' input.txt

然后这样可以通过将第45个字符更改为A来更改文件。

但是当包装到shell脚本(处理命令行变量)时,shell脚本snp2fasta.sh运行正常,但是没有对文件进行任何更改。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

如果你把它放到一个脚本中,不再需要函数调用脚本,直接在脚本中使用它。

就像其他相关帖子(Use argument to...)关于陈述它(以保证$ 1,2和3内容)

#!/bin/bash

# argument passed to script (or any other source if needed like intern to script)
File=$1
Place=$2
NewChar=$3

# sed with unambigous variable content
sed -i "s/^\(.\{${Place}\}\)./\1${NewChar}/" ${File}