Re:Actually using Ed
by 1vuio0pswjnm7 on Saturday December 31, 2022 @09:40PM
(#34203041)
Turns out this was mentioned on StackOverflow in 2017.
Here is a sed solution
sed -i -e1r/dev/stdin -e1N $1
However this still has a limitation. The target file must be more than one line.Using a named pipe for large files
test -s 1.fifo||mkfifo 1.fifo
cat largefile > 1.fifo &
printf '0r 1.fifo\nw\nq\n'|ed -s $1
curl -A "" -4o 1.fifo https://example.com/largefile.gz &
gzip -dc largefile.gz|tail -100|sed -i -e 1r/dev/stdin -e1N $1
Re:Actually using Ed
by 1vuio0pswjnm7 on Wednesday January 11, 2023 @04:50PM
(#34345450)
Instead of sed -i, one can use ired.
od -tx1 -An|sed 's/^/w /'|ired -n $1 /dev/stdin
Unless I am mistaken, ired does not use a temp file, unlike sed -i.
sed is most preferred, but IME there are some simple tasks that are not possible (or exceedingly difficult) with sed but possible with ed.
For example, moving lines and joining lines are obvious ones. Another is using line address "0", namely, with the "r" command.
Both sed and ed allow reading in a file after line 1 but AFAIK only ed allows inserting before line 1, at "line 0". Acording to the changelog, in 2006, GNU ed was modified so that the "i" and "c" commands treat address 0 as address 1.
For example, a common task for me is to insert the contents of file #1 at the top of file #2, followed by a newline.
AFAIK, this is impossible using sed's "r" command, but it's possible using ed's "r" command.
A less space-efficient solution, without resorting to fifos, might be something like