2014-06-13 48 views
0

您好我已經在shell函數中包裝了一個sed命令(它是自己的)。使用函數內的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

這將是一個逃避問題。在sed調用之前放置'set -x'來查看它實際運行的是什麼。 –

+0

當我在sed命令前使用set -x時,我沒有得到終端的輸出 – brucezepplin

+0

對不起@Jayesh - 犯了一個錯誤 - 我確實把文件作爲參數1並編輯後 – brucezepplin

回答

1

如果你把它放到一個腳本中,不再需要函數調用ouside腳本,直接使用腳本來處理腳本。

喜歡上了其他相關崗位(Use argument to...)約狀態時,它(確保thje $ 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} 
+0

謝謝, 。 – brucezepplin