0

我有一个用 vim 创建的 shell 脚本。我唯一知道的就是一个 var 名称。

在文档的某处有一行:

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

this 的值是不正确的,但是通过 shellscripts 执行新功能而不改变 shell script 的作用。

我正在考虑做类似的事情:

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

这可能吗?

4

1 回答 1

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

sed -i.bak expression file对文件执行expression,修改它的-i地方。

表达式在表单上/regex/command,​​它command在匹配的行上运行regex

commandis ,s,search,replace,它搜索和替换文本。

换句话说,它通过查找包含的行来修改文件SecondHome=,并将等号后的所有内容替换为您的字符串。

如果您的 $DirPath/$Repo 是在替换脚本中定义的,而不是在 somefile.sh 中,您也可以用双引号替换单引号

于 2013-01-31T20:22:35.440 回答