您好我已经在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运行正常,但是没有对文件进行任何更改。
为什么会这样?
答案 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}