我想改变这一点:
...
%%%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
首先,删除标记之间(但不包括标记)的内容,然后在开始标记后面附加所需的文本。 “点”结束输入。保存并退出。