如何替换文件中的整个段落?

如何替换文件中的整个段落?

我想改变这一点:

...
 %%%23begin
 aaaaaaa \\
 bbbbbbb \\
 ccccccc \\
 %%%23end
 ...

对此

 ...
 %%%23begin
 xxxxxxxx \\
 yyyyyyyy \\
 zzzzzzzzz \\
 tttttttt \\
 %%%23end
 ...

编辑后行数可能会改变。

使用此功能:

function editEntry(){
  local entryIndex="$1"
  local pattern='^%%%'$entryIndex'begin'
  d1=$(grep -n "$pattern" "$theBook" | cut -d: -f 1)
  d1=$((d1+1))
  local pattern='^%%%'$entryIndex'end'
  d2=$(grep -n "$pattern" "$theBook" | cut -d: -f 1)
  d2=$((d2-1))
  local text1=$(sed  -n "$d1,$d2"p "$theBook")
  echo "$text1" >| "$tmpfile"
  gedit "$tmpfile" && local text2=$(cat "$tmpfile" ) 
  sed -i "s@$text1@$text2@" "$theBook"
}

显然 sed 不会更改整个段落,它只对行进行操作

答案1

编写文本编辑脚本ed的用途是:

ed file <<'SCRIPT'
/%%%23begin/+1,/%%%23end/-1d
/%%%23begin/a
 xxxxxxxx \\
 yyyyyyyy \\
 zzzzzzzzz \\
 tttttttt \\
.
wq
SCRIPT

首先,删除标记之间(但不包括标记)的内容,然后在开始标记后面附加所需的文本。 “点”结束输入。保存并退出。

相关内容