Agregue palabras a un archivo de texto usando un comando de terminal único (sin editores)


22

Soy nuevo en Linux. Necesito editar un .confarchivo solo desde el terminal abierto y no usar ningún editor de texto. Es decir, ¿puedo agregar palabras y oraciones a un archivo de configuración desde un terminal abierto?

Ejemplo: command /home/.../file.conf -add 'abcd'hasta la línea 23 y así sucesivamente. Y finalmente, guárdalo.

¿Es posible buscar una palabra específica en ese archivo de configuración y agregar texto nuevo a la siguiente línea de ese archivo de configuración usando solo el comando?


1
Parece que sedpuede venir a ayudar.
nitishch

1
Haz una sola pregunta.
Avinash Raj

Respuestas:


39

Usualmente hago esto cuando estoy programando mi script para que haga lo mismo que me pides pero programáticamente.

echo "Hello you!" >> myfile.txt
echo "this is 2nd line text" >> file.txt
echo "last line!" >> file.txt

Voila! Lo tienes. Es importante tener en cuenta que >>significa agregar una nueva línea al archivo existente, mientras que >simplemente sobrescribe todo.


Gracias por su pronta respuesta. Pero necesito agregar más de 3000 palabras a la línea 23 de mi archivo .conf secuencialmente. ¿Hay alguna manera más fácil?
user259060

20

Agregar palabras y oraciones a un archivo de configuración desde un terminal abierto se puede lograr fácilmente con sed.

sed -i '23iabcd' file.conf

inserta en la línea 23 el texto abcden el archivofile.conf

-irealiza la modificación directamente al archivo file.conf.

Si quieres usar awkentonces:

awk -v n=23 -v s="abcd" 'NR == n {print s} {print}' file > file.conf

Lo siguiente agrega una línea después de SearchPattern.

sed -i '/SearchPattern/aNew Text' SomeFile.txt

Inserta texto nuevo una línea debajo de cada línea que contiene SearchPattern.

Para agregar dos líneas, puede usar \ay ingresar una nueva línea mientras escribe Nuevo texto.

 sed -i '/pattern/a \
line1 \
line2' inputfile

5

También puedes usar el printfcomando.

Para agregar líneas a su archivo

$ printf "\nThis is a new line to your document" >> file.txt

Para sobrescribir el archivo

$ printf "This overwrites your file" > file.txt

0
awk '{if ($1 ~ /regex/) print $1 "content to be added"; else print $1}' < inputfile > outputfile

Notas:

  • regex es una expresión regular (también conocida como regex), define los criterios de búsqueda. Las expresiones regulares permiten búsquedas muy personalizables y la sintaxis entendida por awk está en el manual . En el caso más simple: busque una cadena "como está", carácter por carácter, simplemente coloque una barra diagonal inversa antes de los caracteres especiales (consulte el manual para ver la lista de caracteres especiales)

Cómo funciona:

  • ábralo inputfilepara leer las líneas de entrada, límpielo outputfiley ábralo para escribir las líneas de salida
  • para cada línea, ejecute el bloque entre llaves:
    • si la línea coincide con la expresión regular, luego envíe la línea con contenido agregado
    • de lo contrario, genera la misma línea.

0

Encontré una solución a mi propia pregunta usando el edcomando

ed -s /home/.../abc.conf <<< $'23i\ntext\n.\nwq'

El texto puede contener 27 líneas. Puede copiar 27 líneas de un archivo de texto y pegar 27 líneas en su archivo de configuración. Pero necesito ejecutar el edcomando simultáneamente para agregar más texto al mismo archivo de configuración.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.