Para insertar texto en una línea específica de un archivo de texto existente en Mac, usa una acción de shell de Atajos para crear una copia editada, inspecciónala y luego cámbiale el nombre en Finder. En esta guía se inserta una línea antes de la línea 3 con un ejemplo desechable.
La tarea consiste en añadir una línea a un pequeño archivo de texto sin formato local y mantener en orden las líneas circundantes. Crearás un atajo de Finder que acepta exactamente un archivo. El texto que se insertará y el número de línea están en el script, lo que facilita repetir la misma edición en copias desechables.
¿Qué significa «insertar en la línea 3»?
En este artículo, insertar significa colocar el texto nuevo antes de la línea numerada existente. Si hay tres líneas originales, insertar Birch antes de la línea 3 produce cuatro líneas:
| Posición | Archivo original | Archivo editado |
|---|---|---|
| 1 | Cedar | Cedar |
| 2 | Maple | Maple |
| 3 | Willow | Birch |
| 4 | — | Willow |
Una línea es un registro delimitado por saltos de línea, no una fila creada por el ajuste visual del texto en un editor. Las líneas en blanco cuentan. El ejemplo usa texto sin formato UTF-8 normal, con finales de línea LF y un salto de línea después de la última línea. Mantén estas condiciones para este ejercicio; los documentos de texto enriquecido y los archivos que usan otras codificaciones o finales de línea requieren otro método.
El comando que realiza la edición es sed de macOS. Sus direcciones numéricas cuentan las líneas desde 1, y su comando i escribe el texto que se insertará antes de la línea indicada. Normalmente escribe el contenido transformado en la salida estándar. Estos comportamientos documentados permiten que el atajo cree un archivo de resultado aparte. Manual de sed distribuido por Apple
Crear un archivo de texto desechable
Abre Terminal y pega este bloque de configuración completo. Crea en el Escritorio una carpeta llamada Line Insert Demo y un archivo de tres líneas llamado notes.txt. Si ya existe una carpeta con ese nombre, la configuración se detiene; elige un nombre nuevo para la carpeta antes de volver a intentarlo.
/bin/sh <<'SH'
set -e
demo_dir="$HOME/Desktop/Line Insert Demo"
/bin/mkdir "$demo_dir"
printf '%s\n' 'Cedar' 'Maple' 'Willow' > "$demo_dir/notes.txt"
printf 'Created: %s\n' "$demo_dir/notes.txt"
SH
La creación de la carpeta omite deliberadamente la opción que permite usar un directorio existente. El paso de escritura del archivo se ejecuta solo después de crear una carpeta nueva, así que esta configuración no sobrescribe un ejemplo anterior. La documentación de shell de Apple explica cómo usar printf y la redirección de salida para crear archivos de texto. Entrada y salida del shell
Mantén este ejercicio dentro de esa carpeta desechable. En Finder, abre el Escritorio y busca Line Insert Demo; seleccionarás su archivo notes.txt después de crear el atajo.
Crear un atajo de Finder con el tipo de entrada correcto
Crea en Atajos un atajo llamado Insert Birch Before Line 3. Apple documenta cómo crear un atajo con el botón Añadir de la barra de herramientas, asignarle un nombre y añadir acciones desde la barra lateral. Crear un atajo personalizado en Mac
Configúralo así:
- Abre
Detallesdel atajo y activaUsar como acción rápida, conFinderseleccionado. - En el encabezado de entrada del atajo, cambia el contenido aceptado a
Archivosy desactiva los demás tipos. - Añade la acción
Ejecutar script de shell. - Configura
Shellcomo/bin/sh,EntradacomoEntrada del atajoyPasar entradacomocomo argumentos. - Sustituye el script de ejemplo de la acción por el programa completo de la siguiente sección.
Apple documenta cómo activar los atajos de Finder y limitar los tipos de entrada que aceptan. Su tipo Archivos incluye muchos tipos de documentos, así que este ajuste permite que el atajo reciba archivos; no valida su formato de texto. El script incorpora comprobaciones más específicas. Ejecutar un atajo mientras trabajas en tu Mac, Limitar la entrada de un atajo, Entender los tipos de entrada
La cadena de entrada es importante: Finder proporciona un archivo a Atajos y la acción de shell pasa su ruta como argumento, disponible en el script como $1. No pongas una acción para leer texto antes de la acción de shell: este programa necesita la ruta del archivo para leer el archivo existente y elegir un nombre para el archivo de salida en la misma ubicación.
Apple confirma que Atajos para Mac permite ejecutar scripts de shell directamente en el editor. Si los scripts están desactivados, elige Atajos > Configuración, abre Avanzado y activa Permitir ejecutar scripts. Conoce Atajos para macOS, Configuración avanzada de Atajos
Insertar la línea y crear un resultado aparte
Pega este programa completo en Ejecutar script de shell. Requiere un archivo normal existente, inserta Birch antes de la línea 3 y escribe un archivo contiguo cuyo nombre se crea añadiendo .inserted.txt a la ruta de origen.
#!/bin/sh
set -eu
fail() {
printf '%s\n' "$1" >&2
exit 1
}
[ "$#" -eq 1 ] || fail 'Select exactly one example text file.'
file=$1
line=3
case "$file" in
/*) ;;
*) fail 'The input must be an absolute file path.' ;;
esac
[ -f "$file" ] || fail 'The input file does not exist or is not a regular file.'
[ ! -L "$file" ] || fail 'Select the example file itself, not a symbolic link.'
[ -r "$file" ] || fail 'The input file cannot be read.'
count=$(/usr/bin/sed -n '$=' "$file") || fail 'Could not count the input lines.'
[ -n "$count" ] || fail 'The input file is empty.'
[ "$line" -le "$count" ] || fail 'The insertion line is beyond the end of the file.'
output="${file}.inserted.txt"
if [ -e "$output" ] || [ -L "$output" ]; then
fail 'The output name already exists. Inspect or rename that result first.'
fi
if (
set -C
/usr/bin/sed "${line}i\\
Birch
" "$file" > "$output"
); then
printf 'Created edited copy: %s\n' "$output"
else
fail 'Could not finish the edited copy. Inspect any partial output before retrying.'
fi
Los saltos de línea físicos dentro de la expresión sed son intencionales. Conserva la barra inversa después de i, el salto de línea que sigue y el texto que se insertará en su propia línea. La estructura del comando sigue el manual distribuido por Apple; evita depender de una forma de inserción abreviada copiada de otra implementación de sed. Manual de sed: comandos y texto de inserción
Las comprobaciones que rodean al comando definen las reglas de decisión del flujo de trabajo. Para insertar antes de una línea numerada, esa línea debe existir. Por eso, el programa rechaza un archivo vacío y un número de línea mayor que el de la última línea. También rechaza un nombre de salida existente, y el modo noclobber del shell ofrece otra comprobación al abrir el archivo de salida.
El script lee el original y escribe un archivo aparte. Si falla la escritura, el original sigue disponible, aunque puede quedar un archivo de salida incompleto. Considera que un error indica una operación sin terminar e inspecciona ese archivo de salida antes de eliminarlo o volver a intentarlo. Ejecuta solo una instancia a la vez y no modifiques el archivo de origen durante la operación.
La salida de la acción es un mensaje de estado de texto que contiene una ruta, no un objeto de archivo de Atajos. El script crea el archivo editado mediante una redirección. Si después añades Guardar archivo, se guardará la salida de la acción en lugar de realizar la inserción de línea prevista. Apple documenta Guardar archivo como una acción para compartir y gestionar archivos; su documentación no la describe como un editor de líneas numeradas. Acerca de las acciones para compartir en Atajos en Mac
Ejecutar el atajo, inspeccionar el resultado y conservar el nombre original
En Finder, haz clic con la tecla Control pulsada en el archivo desechable notes.txt y elige Acciones rápidas y luego Insert Birch Before Line 3. Apple documenta esta forma de ejecutar el atajo. Si no aparece, comprueba que Finder esté activado en los detalles y que el tipo de entrada aceptado incluya Archivos. Ejecutar un atajo mientras trabajas en tu Mac
Después de ejecutarlo correctamente, la carpeta de demostración contiene notes.txt y notes.txt.inserted.txt. Abre este último y comprueba que su contenido sea exactamente:
Cedar
Maple
Birch
Willow
También puedes inspeccionar el archivo de salida desde Terminal con este comando completo:
/bin/cat "$HOME/Desktop/Line Insert Demo/notes.txt.inserted.txt"
Para que el contenido editado tenga la ruta original, cierra los documentos de ejemplo y cambia estos dos nombres en Finder. Primero, confirma que notes.original.txt no esté en uso; si existe, elige otro nombre de respaldo que no esté en uso.
- Selecciona
notes.txt, pulsaReturn, cámbiale el nombre anotes.original.txty vuelve a pulsarReturn. - Selecciona
notes.txt.inserted.txt, pulsaReturn, cámbiale el nombre anotes.txty vuelve a pulsarReturn. - Abre el archivo recién nombrado
notes.txty verifica las cuatro líneas.
Apple documenta que puedes seleccionar un elemento y pulsar Return para cambiarle el nombre. Conserva la extensión .txt final en ambos nombres. Si Finder indica que el nombre ya existe, detente e inspecciona el elemento existente antes de elegir un nombre que no esté en uso. Cambiar el nombre de archivos, carpetas y discos en Mac
Al terminar, el contenido editado estará en notes.txt y el original, en notes.original.txt. Esto reemplaza el archivo que ocupa la ruta original; no conserva la identidad del archivo original ni garantiza que se mantengan las etiquetas de Finder, los atributos extendidos u otros metadatos.
Ajustar la inserción sin cambiar su significado
Para otro archivo desechable, cambia line=3 por un número de línea existente y sustituye Birch por una línea de texto sencilla. Mantén intacta la sintaxis de inserción que se muestra. El texto de ejemplo no contiene comillas, signos de dólar, acentos graves ni barras inversas; para usar texto arbitrario se necesitan reglas adicionales de entrecomillado para shell y sed.
Usa esta tabla de decisiones antes de editar el script:
| Cambio deseado | Qué hacer |
|---|---|
| Colocar texto antes de la primera línea | Establece line=1 en un archivo de ejemplo que no esté vacío. |
| Colocar texto antes de otra línea existente | Establece line en el número de línea positivo correspondiente. |
| Añadir texto después de la última línea | Usa una operación de adición aparte; este programa rechaza una línea de destino inexistente. |
| Insertar en un archivo vacío | Crea su contenido inicial por separado; no hay ninguna línea existente a la que referirse. |
| Ejecutar dos veces el mismo atajo | Inspecciona primero la salida anterior. Después de reemplazar el original, otra ejecución inserta otra copia del texto. |
Para esta tarea de escritorio, los puntos de control útiles son el archivo seleccionado, la posición de inserción, el resultado terminado y el nombre final del archivo. Cuando el ejemplo de cuatro líneas sea correcto, la misma secuencia te permitirá probar otra inserción sencilla y conservar el texto inicial.
Fuentes
- sed — editor de flujo — Distribuciones de código abierto de Apple
- Entrada y salida del shell — Archivo de documentación para desarrolladores de Apple
- Crear un atajo personalizado en Mac — Soporte de Apple
- Ejecutar un atajo mientras trabajas en tu Mac — Soporte de Apple
- Limitar la entrada de un atajo cuando se ejecuta desde otra app en Mac — Soporte de Apple
- Entender los tipos de entrada en Atajos en Mac — Soporte de Apple
- Conoce Atajos para macOS — Apple Developer
- Configuración avanzada de privacidad y seguridad en Atajos en Mac — Soporte de Apple
- Acerca de las acciones para compartir en Atajos en Mac — Soporte de Apple
- Cambiar el nombre de archivos, carpetas y discos en Mac — Soporte de Apple