buscar y reemplazar arry en plist

buscar y reemplazar arry en plist

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.txtti deberías escribir tu filename.
Mostrará el resultado en la salida estándar ( ttyen la que estás trabajando).

Después de verificar si funcionó bien, puede escribir la misma línea agregando el parámetro -ipara 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 NameOfYourFiletodas las apariciones de la cadena OLDy la sustituirá por la cadena NEW.

  • 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 -isustituirá la cadena en el archivo sin mostrar el resultado en la pantalla. Para esto puede ser mejor probarlo antes sin él.
  • Debajo BSDpuede ser importante elorden de parámetros, por lo que sed ... -ipodría no ser el mismo sed -i ...y darte el error que encuentres.
  • Es posible que necesite agregar sudoal 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 con ls -l NameOfYourFile).

Notas

deman sed

-i[SUFIJO],--en su lugar[=SUFIJO]

          edit files in place (makes backup if SUFFIX supplied)

información relacionada