Предварительно добавить на место с помощью ex
:
ex -s '+0s/^/add text here/' '+:wq' my_file
От стандартного ввода к стандартному выводу:
ex -s '+0s/^/add text here/' '+%print' '+:wq' /dev/stdin
Обратите внимание, что это работает только с одним файлом, в отличие от sed
.
Итак, для вашей ситуации:
$ ls
empty not_empty
$ stat --format '%n: %s' *
empty: 0
not_empty: 6
$ cat empty
$ cat not_empty
a
b
c
$ find . -type f | xargs -I '{}' ex -s '+0s/^/add text here/' '+:wq' '{}'
$ cat empty
add text here
$ cat not_empty
add text herea
b
c
Обратите внимание, что -I
используется, чтобы заставить xargs выполнять ex
один раз для файла, а не пытаться агрегировать аргументы.
И для полноты, пример фильтра из stdin в stdout:
$ printf "%s\n" hello world | ex -s '+0s/^/add text here/' '+%print' '+:wq' /dev/stdin
add text herehello
world
$ cat /dev/null | ex -s '+0s/^/add text here/' '+%print' '+:wq' /dev/stdin
add text here