Digamos que tenía un bloque de texto en ~/.bashrc
:
#~/.bashrc
# ...some commands...
# aliases
alias suicide='sudo rm -rf /'
# end aliases
# other commands
Deseo reemplazar ese bloque de texto con otro texto contenido entre dos marcadores en otro archivo: stuff-to-place-in-bashrc.txt
# stuff-to-place-in-bashrc.txt
# ...stuff...
# aliases
alias ldir='ls * -d'
alias ithinklifeisworthliving='echo all good'
# end aliases
# ...more stuff...
He intentado
sed -ne 's/# aliases\s+\(.*\)\s+# end aliases/\1/' stuff-to-place-in-bashrc.txt
Pero realmente estoy balanceándome en la oscuridad aquí. podria alguien ayudarme?
¿Cómo extraigo el texto de la
stuff-to-place-in-bashrc.txt
?¿Cómo reemplazo la otra sección
~/.bashrc
con el texto extraído de la pregunta 1?
Editar
Gracias por las actualizaciones chicos, aquellos que se preguntan por qué querría algo como esto:
permite actualizaciones seleccionadas por cereza para archivos de script sin sobrescribir las adiciones hechas por el usuario útil para entornos operativos estándar compartidos y actualizados con frecuencia (como mi último trabajo en Tyro que codificó con XP).
volverse locos chicos.
fuente
# aliases
y# end aliases
), y puede funcionar para usted.Respuestas:
Ed es el editor estándar, porque puede usarlo para desarrollar scripts ed y dejar que haga su trabajo, como lo probó anteriormente, de forma interactiva. Para archivos pequeños como
.bashrc
o cualquier texto de código, ed es eficaz porque lee todo el archivo de una vez y funciona con el búfer. Por la misma razón, no debe usar ed para archivos grandes como archivos de registro.Pero con un script ed, su trabajo se realiza en poco tiempo:
Utilizo scripts similares para ajustar automáticamente los archivos de configuración, como también .asoundrc para diferentes entornos a los que llevo mi computadora portátil.
El mejor documento sobre ed viene como una simple página de manual del genial sistema PLAN9 . Lo traduje a un documento PostScript ed.ps. Si está interesado en PLAN9 , debe verificar 9front y http://cat-v.org/ ya que la versión original de los laboratorios de campanas aún se mantiene pero tiene un sistema de archivos muy simple.
Una última palabra sobre editor wars, emacs, vim y similares: ¡reglas de acme!
fuente
w
,q
)/^# aliases
, y/^# end aliases/
), y los otros comandos son Vi / Ed. Ver, por ejemplo, vimhelp.appspot.com/cmdline.txt.html#%3Arange para+, /^# end aliases/
.info Ed
en su sistema (con suerte). No sé por qué las distribuciones modernas de Linux no instalan este genial editor. w y q son comandos de escritura y salida. Y ed funciona de manera muy similar a sed con expresiones regulares. Hay una razón por la cual los nombres suenan tan similares. d significa eliminar las líneas direccionadas, -r lee en la línea anterior los resultados del!
comando que sigue. Acorto los nombres de archivo en la edición, ya que soy muy vago escribiendo esta madrugada.Si desea editar el archivo en el lugar,
ed
es una muy buena solución. Si desea editarlo in-stream, usesed
. Evitarsed -i
.fuente
Claro, puede hacerlo
ed
solo, sin necesidad de herramientas adicionales:si está satisfecho con el resultado, reemplácelo
,p
conw /home/username/.bashrc
para escribir los cambios~/.bashrc
(tenga en cuenta la ruta completa utilizada conr
yw
; simplemente puede usar.bashrc
si está encwd
).Cómo funciona esto: primero
d
elegimos las líneas innecesarias destuff_to_place.txt
. Luego eliminamos los restantes (los alias) con,d
. El búfer de texto ahora está vacío mientras que el búfer de corte contiene las líneas que queremos. Luego,r
colocamos el contenido.bashrc
en el búfer de texto, colocamos el contenido del búfer de corte (x
) después de la/# aliases/
línea, duplicamos la última línea que se pegó (.t.
), luego eliminamos de la línea duplicada pero no incluimos/# end aliases/
y finalmentep
rint ow
rite cambios yq
uit.fuente