如何通过终端查找和替换文本文档中的行

时间:2013-01-31 20:20:21

标签: bash shell terminal

我有一个用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

这可能吗?

1 个答案:

答案 0 :(得分:2)

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

sed -i.bak expression file对文件执行expression,将其修改为-i n。

表达式位于/regex/command表单上,该表单在与command匹配的行上运行regex

commands,search,replace,,用于搜索和替换文字。

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

如果在替换脚本中定义$ DirPath / $ Repo而不在somefile.sh

中,也可以用双引号替换单引号