1 votos

AppleScript para masajear URL

Quiero tener un menú de los Servicios de elemento que toma el texto seleccionado (una URL) y se escapa el carácter de porcentaje y el # personaje:

  1. Reemplace % con \%
  2. Reemplace # con \string#

He copiado y editado un existente script que hace similar manipulación de texto. Esto parece funcionar bien , excepto cuando la dirección URL contiene un &.

Yo creo que esto tiene algo que ver con la necesidad de utilizar el quoted form of cadena, pero no puedo determinar el lugar correcto para especificar que.

Entrada De Ejemplo:

http://books.google.com?xxx&xxx%22+xxx#v=onepage&q=%22Search%20String&f=false

Se Requiere De Salida

http://books.google.com?xxx&xxx\%22+xxx\string#v=onepage&q=\%22Search\%20String&f=false

Código:

on run {input, parameters}
set sanatizedURLString to ¬
    (do shell script ("echo " & input & "  | sed 's/%/\\\\%/g' | sed 's/#/\\\\string#/g' ;"))
return sanatizedURLString
end run

2voto

user3439894 Puntos 5883

Esta es la forma en que me gustaría código es:

on run {input, parameters}
    set aURL to input as string
    set sanatizedURL to ¬
        do shell script "sed -e 's:%:\\\\%:g' -e 's:#:\\\\string#:g' <<< " & aURL's quoted form 
    return sanatizedURL
end run

      Sugerencia: Mouse sobre el y de desplazamiento horizontal para ver completo el código.


Notas:

input es una lista por ejemplo:

{"http://books.google.com?xxx&xxx%22+xxx#v=onepage&q=%22Search%20String&f=false"}

set aURL to input as string hace:

http://books.google.com?xxx&xxx%22+xxx#v=onepage&q=%22Search%20String&f=false

En la do shell script comando sed sólo necesita ser llamado una vez, no dos como en el original código. sed puede tomar varios comandos mediante el uso de la -e opción, por lo tanto no hay necesidad en este caso a la tubería de la salida de uno sed comando a otro sed comando.

No es necesario echo algo sed como se puede procesar un archivo o un aquí de la cadena, por lo tanto el uso de <<< en la do shell script comando, seguido por & aURL's quoted form que es por ejemplo:

'http://books.google.com?xxx&xxx%22+xxx#v=onepage&q=%22Search%20String&f=false'

Citando a la value de aURL mantiene el shell de procesamiento de cualquier shell caracteres especiales en la cadena.

Por lo tanto, cuando se ejecuta, el do shell script comando se ve, como por ejemplo:

do shell script "sed -e 's:%:\\\\%:g' -e 's:#:\\\\string#:g' <<< 'http://books.google.com?xxx&xxx%22+xxx#v=onepage&q=%22Search%20String&f=false'"

      Sugerencia: Mouse sobre el y de desplazamiento horizontal para ver completo el código.

El uso de : vs / en la sed comando es una preferencia personal, en este caso como se hace el comando más fácil de leer cuando se tiene que hacer múltiples escapa.

El uso de echo en el original código aplana la lista a una cadena, sin embargo yo prefiero no usar ese método para hacer la do shell script comando de menos complicado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X