我正在使用环境变量,只想找到包含环境变量的行,并将其替换为由特殊字符组成的整行。
详细信息:project_path="abc/test-roadie"
简而言之,我试图在包含$project_path
的文件中找到一行,一旦找到,就用下面的行替换整行:
app('projects/$project_path', [hello.dev, hello.stage, hello.prod]),
(请注意结尾的逗号)
我尝试的命令:
sed -i '/'$project_path'.*/c app('"'projects/$project_path'"'," [hello.dev, hello.stage, hello.prod]),' file_name
sed:1:“文件”:无效命令代码f
请注意我想替换整行。问题出在我要替换的复杂字符串上,它由括号,逗号,斜杠组成。它没有被替换。
2条答案
按热度按时间gt0wga4j1#
不要尝试使用sed,因为它不理解文本字符串(参见is-it-possible-to-escape-regex-metacharacters-reliably-with-sed),使用awk代替:
上面假设
$project_path
不包含转义,如果它可以看到how-do-i-use-shell-variables-in-an-awk-script作为-v
的替代,并且您希望$project_path
在搜索和替换字符串中都展开。czfnxgou2#
您可以用途:
此处:
:
-sed的分隔符^.*[\$]project_path.*\$
- regex搜索行^.*
-从行首开始的所有内容[\$]
-ERE正则表达式中的美元符号project_path
-“变量”的名称.*\$
-行结束前的所有内容另外,注意所有的
$
都用\
转义,因为替换命令用双引号括起来了。我认为转义$
比转义单引号更赏心悦目。