搜索特定模式并使用新模式替换其上方的任何单词或行

joh*_*nny 1 vim awk sed

假设我有以下句子:

jack and jill
climbs up a hill
Run Code Online (Sandbox Code Playgroud)

我想hill在文件中搜索并替换jilljerry,即它上面的行,同时hill保持原样.是否可以使用vim编辑器或awk/sed?

SLe*_*ort 5

使用GNU sed:

sed 'N;/\n.*hill/s/jill\(.*[^\n]\)/jerry\1/' file
Run Code Online (Sandbox Code Playgroud)
  • N:将下一行附加到模式空间
  • /\n.*hill/:如果hill在新行之后找到
  • s/jill\(.*[^\n]\)/:jill在新行之前替换找到并跟踪捕获的字符
  • jerry\1:使用jerry字符串后跟捕获的字符

编辑该文件的地方,尝试-i标志:

sed -i 'N;/\n.*hill/s/jill\(.*[^\n]\)/jerry\1/' file
Run Code Online (Sandbox Code Playgroud)