我有一个用vim创建的shell脚本。唯一认为我知道的是var名称。
文档中的某处有一行:
SecondHome='/Users/me/Documents/code/'
这个值不正确,但是通过执行新功能的shell脚本而不改变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
这可能吗?
答案 0 :(得分:2)
sed -i.bak '/SecondHome=/s,=.*,=$DirPath/code/$Repo,' somefile.sh
sed -i.bak expression file
对文件执行expression
,将其修改为-i
n。
表达式位于/regex/command
表单上,该表单在与command
匹配的行上运行regex
。
command
是s,search,replace,
,用于搜索和替换文字。
换句话说,它通过查找包含SecondHome=
的行来修改文件,并用等号替换等号后的所有内容。
如果在替换脚本中定义$ DirPath / $ Repo而不在somefile.sh
中,也可以用双引号替换单引号