Com o GNU sed :
sed -e '1i ;;' -e '$a ;;'
É composto por duas expressões sed :
-
1i ;;insere (i);;(nova linha incorporada) antes da primeira linha (1) -
$a ;;appends (a);;(nova linha incorporada) após a última linha ($)
Exemplo:
$ cat foo.txt
sdas
adas
$ sed -e '1i ;;' -e '$a ;;' foo.txt
;;
sdas
adas
;;
Como você tem todos os arquivos em add.txt , assumindo que nenhum nome de arquivo contenha nenhum caractere de IFS (espaço, tabulação, nova linha por padrão) nem caracteres curinga ( * , ? , [] ), Você pode fazer o seguinte para editar os arquivos em vigor com uma extensão .bak como backup do original:
sed -i.bak -e '1i ;;' -e '$a ;;' -- $(cat add.txt)
Sem um backup:
sed -i -e '1i ;;' -e '$a ;;' $(cat add.txt)
Quando -i é usado, os arquivos são tomados separadamente, em vez de um único fluxo, então estamos prontos. Sem -i , precisamos usar a opção -s para obter fluxos separados para arquivos.
Ou leia os nomes dos arquivos, separados por nova linha e faça a operação um por um, com backup:
while IFS= read -r f; do sed -i.bak -e '1i ;;' -e '$a ;;' -- "$f"; done <add.txt
sem backup:
while IFS= read -r f; do sed -i -e '1i ;;' -e '$a ;;' -- "$f"; done <add.txt