在找到匹配项后,我正在尝试替换文本文件中的第一个句子实例.请注意,’引号包含在搜索中.
>我正在搜索第一个实例:’database‘=> ‘localhost’ 的
>我正在用”database’=>替换第一个实例’new_database’
>我想只在字符串’REPLACE_AFTER_THIS’之后替换
我目前有前两个要点:
sed -i file -e "1s/'database' => 'localhost'/'database' => 'new_database'/;t" -e "1,/'database' => 'localhost'/s//'database' => 'new_database'/" file
输入文件
'local config' ... 'data' 'more data' 'database' => 'localhost' 'even more data' 'REPLACE_AFTER_THIS' ... 'data' 'more data' 'even more data' 'database' => 'localhost' 'live config' 'database' => 'localhost'
'local config' ... 'data' 'more data' 'database' => 'localhost' 'even more data' 'REPLACE_AFTER_THIS' ... 'data' 'more data' 'even more data' 'database' => 'new_database' 'live config' 'database' => 'localhost'
上面的示例演示了除了字符串’database’=>之外没有预期的数据格式. ‘localhost’,第一次出现’REPLACE_AFTER_THIS’后需要更改.
但是,在找到某个字符串后,我无法弄清楚如何只执行上述操作.我已经尝试使用grep和一个模式来检索REPLACE_AFTER_THIS之后的所有文本,但是然后管道进入sed而不是使用-i标志不再对文件执行任何更改.
解决方法
@H_301_40@ 尝试使用GNU sed:sed -i "/'REPLACE_AFTER_THIS'/,/'database' => 'localhost'/s/'database' => 'localhost'/'database' => 'new_database'/" file