ファイルの段落全体を置き換える方法は?

ファイルの段落全体を置き換える方法は?

私はこれを変えたい:

...
 %%%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

まず、タグ間(含まれていない)間のコンテンツを削除してから、開くタグの後に目的のテキストを追加します。入力を終了するには「クリック」してください。保存と終了。

関連情報