Agregar text al final de cada línea

He intentado muchos commands, como este:

sed -i '' "s/$/<@string>/" txt.txt > txt2.txt 

Esto hace que txt2.txt esté vacío, ¿por qué?!?

 sed 's/$/<@string>/' txt.txt > txt2.txt 

Esto no hace absolutamente nada y me dice que la ruta <string> no existe.

Entonces, ¿qué hago, estoy usando bsd sed porque estoy en OS X.

El modificador -i hace que sed edite el file original. Eso significa que no hay salida y dado que no hay salida, su networkingirección genera un file vacío.

Entonces, lo que quieres es cualquiera

 sed -i '' 's/$/<@string>/' txt.txt 

que cambiará el txt.txt original. O solo

  sed 's/$/<@string>/' txt.txt > txt2.txt 

La opción -i in sed no es del todo compatible entre Linux y Unix y es posible que no esté disponible en otros sistemas operativos.

En segundo lugar, no puede usar -i y IO-networkingirection ( > ) juntos, porque se excluye a sí mismo. El uso de edición in situ ya modifica el file.

Por lo tanto, si desea editar el file in situ (en el mismo file), es mejor usar ex :

 ex +"%s/$/<@string>/g" -cwq foo.txt 

Para replace la cadena y escribir en otro file, intente:

 ex +"%s/$/<@string>/g" +"w another.txt" -cq! foo.txt 

El command ex es equivalente a vi -e .