Intentaré encontrar y reemplazar una matriz en un plist. Puedo escribir con los valores predeterminados escribir una matriz sin problemas, pero no puedo eliminar una matriz.
La lista es:~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plisty
Me gustaría eliminar:
<dict>
<key>LSHandlerPreferredVersions</key>
<dict>
<key>LSHandlerRoleAll</key>
<string>-</string>
</dict>
<key>LSHandlerRoleAll</key>
<string>com.apple.mail </string>
<key>LSHandlerURLScheme</key>
<string>mailto</string>
</dict>
y reemplácelo con:
<dict>
<key>LSHandlerPreferredVersions</key>
<dict>
<key>LSHandlerRoleAll</key>
<string>-</string>
</dict>
<key>LSHandlerRoleAll</key>
<string>com.microsoft.outlook </string>
<key>LSHandlerURLScheme</key>
<string>mailto</string>
</dict>
He buscado en internet pero no encuentro la solución ;-) ¿Alguien puede ayudarme? Le agradezco de antemano su ayuda, Netzmeister.
Respuesta1
desde ellistaParece ser un archivo de texto normal, en Linux es suficiente escribir (es una sola línea)
sed 's/<string>com.apple.mail<\/string>/<string>com.microsoft.outlook<\/string>/g' AAA.txt
donde en lugar de AAA.txt
ti deberías escribir tu filename
.
Mostrará el resultado en la salida estándar ( tty
en la que estás trabajando).
Después de verificar si funcionó bien, puede escribir la misma línea agregando el parámetro -i
para modificar el archivo dentro
sed -i 's/<string>com.apple.mail<\/string>/<string>com.microsoft.outlook<\/string>/g' AAA.txt
Alguna explicación más:
sed -i 's/OLD/NEW/g' NameOfYourFile
El comando anterior buscará dentro del archivo
NameOfYourFile
todas las apariciones de la cadenaOLD
y la sustituirá por la cadenaNEW
.Debes identificar adecuadamente elpalabra claveque quieras sustituir, en este caso con las etiquetas incluidas:
<string>com.apple.mail</string>
.
Como hay un,/
debes protegerlo con un\
antes y la palabra clave se convierte en<string>com.apple.mail<\/string>
. (Hay que aplicar la misma lógica a la segunda cadena).- El parámetro
-i
sustituirá la cadena en el archivo sin mostrar el resultado en la pantalla. Para esto puede ser mejor probarlo antes sin él. - Debajo
BSD
puede ser importante elorden de parámetros, por lo quesed ... -i
podría no ser el mismosed -i ...
y darte el error que encuentres. - Es posible que necesite agregar
sudo
al principio para obtener elprivilegio de root, o para ejecutar ese comando desde uncaparazón raíz, si no se le permite, como usuario normal, modificar ese archivo. (Puedes consultarlo conls -l NameOfYourFile
).
Notas
deman sed
-i[SUFIJO],--en su lugar[=SUFIJO]
edit files in place (makes backup if SUFFIX supplied)