Applescript per sostituire la stringa usando sed

1

Ho bisogno e Applescript per sostituire del testo come segue:

Testo originale:

 string  string  string  $  text1
 string  string  string  $  text2
 text3
 string  string  string  $  text4

L'output richiesto è:

$ text1
$ text2
text3
$ text4

Posso farlo nel terminale con questo comando:

$ echo "string  string  string  $  text1
string  string  string  $  text2
text3
string  string  string  $  text4" | sed -r 's/^(.*)\$ ?(.) (.*)$/$ /g'
$ text1
$ text2
text3
$ text4

A proposito, sto usando bash versione 4.3.30 e sed 4.2.2, entrambi da homebrew.

Il problema qui è che ho bisogno di farlo da un applecript. Questo è il mio approccio:

set commandString to "echo \"string  string  string  $  text\" | sed -r 's|^(.*)\$ ?(.) (.*)$|$ \3|g'" as string
set formattedCode to do shell script commandString

E ottengo il seguente errore:

error "sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]" number 1

Se rimuovo l'opzione -r , ottengo un errore diverso:

sed: 1: "s|^(.*)\$ ?(.) (.*)$|$  ...":  not defined in the RE

Se rimuovo , l'output deve essere $ anziché $ text , ma sed comando non fa nulla e restituisce:

string  string  string  $  text

Supponevo che questo potesse essere un problema con la versione sed . Quindi, se sostituisco sed con /usr/local/bin/sed , non fa più nulla dopo la riga set formattedCode to do shell script commandString .

Qualcuno sa dove si trova il problema?

    
posta jherran 07.12.2014 - 19:33
fonte

1 risposta

4

Soluzione 1: sed

L'opzione -r di GNU sed è -E su OS X / BSD sed (quella che viene fornita con il sistema operativo, /usr/bin/sed ). E per eliminare il problema di codifica con , aggiungi export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; all'inizio del comando di script do shell (vedi la domanda qui ):

set original_text to "string  string  string  $  text1
string  string  string  $  text2
text3
string  string  string  $  text4"

set commandString to "export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; " & ¬
    "echo " & quoted form of original_text & " | sed -E 's|^(.*)\$ ?(.) (.*)$|$ \3|g'" as string
set formattedCode to do shell script commandString

Returns:

$ text1
$ text2
text3
$ text4

Soluzione2:delimitatoridielementiditestodiAppleScript

setoriginal_textto"string  string  string  $  text1
string  string  string  $  text2
text3
string  string  string  $  text4"

set output to {}
set od to AppleScript's text item delimiters
set AppleScript's text item delimiters to {"
"}
set all_lines to every text item of original_text
repeat with the_line in all_lines
    if "$" is not in the_line then
        set output to output & the_line
    else
        set AppleScript's text item delimiters to {"$"}
        set latter_part to last text item of the_line
        set AppleScript's text item delimiters to {" "}
        set last_word to last text item of latter_part
        set output to output & ("$ " & last_word as string)
    end if
end repeat
set AppleScript's text item delimiters to {"
"}
set output to output as string
set AppleScript's text item delimiters to od
return output

Returns:

$ text1
$ text2
text3
$ text4

    
risposta data 07.12.2014 - 21:02
fonte

Leggi altre domande sui tag