2013-01-31 29 views
0

我有一個用vim創建的shell腳本。唯一認爲我知道它是一個var名稱。如何通過終端找到並替換文本文檔中的一行

某處的文件中有一行:

SecondHome='/Users/me/Documents/code/' 

的這個值是不正確的,但通過shellscripts執行新的功能,而無需改變這種shell腳本做什麼。

我的想法做一些事情,如:

grep -n "SecondHome" somefile.sh 

它會吐出行號+的配襯,但只改變第一位的,因爲這是變量定義。

我當時就想,然後做在該線路上更換莫名其妙地使它看起來像:

export SecondHome=$DirPath/code/$Repo 

然後運行其中已修改腳本文件。

#!/bin/zsh 
export DirPath=/Users/me/Documents/ 
export Repo=MyNewRepo/ 
export LineNumber=$(grep -n "SecondHome" somefile.sh) 
#carry out replace on somefile.sh at $LineNumber with: export SecondHome=$DirPath/code/$Repo/ 
. ./somefile.sh 

這是可能的嗎?

回答

2
sed -i.bak '/SecondHome=/s,=.*,=$DirPath/code/$Repo,' somefile.sh 

sed -i.bak expression file執行對文件的expression,修改它-iÑ地方。

該表達式的格式爲/regex/command,它在匹配regex的行上運行command

commands,search,replace,,它搜索和替換文本。

換句話說,它通過查找包含SecondHome=的行並使用字符串替換等號後的所有內容來修改文件。

也可以取代單引號用雙引號,如果你的$ DirPath $回購是在更換腳本中定義的,而不是在somefile.sh

+0

對於文檔的目的/,你能描述一下這個是幹什麼的未來看這個帖子的人?我不明白所有的參數。 – Fallenreaper

相關問題