【发布时间】:2015-11-11 04:54:35
【问题描述】:
我正在尝试在找到匹配项后替换文本文件中句子的第一个实例。请注意,' 引号包含在搜索中。
- 我正在搜索第一个:
'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 标志不再对文件执行任何更改。
在文件中找到给定字符串后,如何更改我当前工作的解决方案以替换句子的第一个实例?
【问题讨论】:
-
显示示例输入以及该示例输入所需的输出。
-
@Cyrus 听起来很明显?
-
添加了一个任意示例,尽管我确信从要点中不需要。