代码之家  ›  专栏  ›  技术社区  ›  Tim Joe

自动转换器将字符替换为apple脚本或shell脚本

  •  3
  • Tim Joe  · 技术社区  · 11 年前

    我正在创建一个自动进程,但我需要使用字符串并将所有“\”字符替换为字符“/”。与一位好友合作,我们决定使用shell脚本,但我对任何事情都持开放态度。对于我们写的这行,我们只是得到了一个错误。

    set input to (do shell script "echo \"" & input & "\" | sed 's/\\\\//g'")
    

    谢谢

    3 回复  |  直到 11 年前
        1
  •  3
  •   adayzdone    11 年前

    尝试:

    set myString to "This\\is\\my\\string" -- really This\is\my\string
    
    set {TID, text item delimiters} to {text item delimiters, "\\"}
    set myString to text items of myString
    set text item delimiters to "/"
    set myString to myString as text
    set text item delimiters to TID
    
    return myString
    

    set input to "This\\is\\my\\string" -- really This\is\my\string
    set output to do shell script "echo " & quoted form of input & " | sed 's/[\\]/\\//g'"
    
        2
  •  1
  •   Community kfsone    7 年前

    据我所知, it is no longer necessary to restore text item delimiters ,所以adayzdone的例子可以简化为这样的东西:

    set s to "aa\\bb\\cc"
    set text item delimiters to "\\"
    set ti to text items of s
    set text item delimiters to "/"
    ti as text -- "aa/bb/cc"
    

    do shell script 使用 /bin/sh ,这是bash的一个版本,以POSIX模式启动,并有一些其他更改。其中之一就是 xpg_echo 默认情况下处于启用状态,因此 echo 将转义序列解释为 \t :

    do shell script "echo " & quoted form of "ss\\tt" & " | xxd -p" -- "737309740a"
    

    你可以使用 printf %s 相反:

    do shell script "printf %s " & quoted form of "ss\\tt" & "|tr \\\\ /" -- "s/t"
    

    如果您不添加 without altering line endings 说明符, 执行shell脚本 将行结尾转换为CR,并从输出的结尾处缩进一行换行符。

        3
  •  0
  •   mklement0    10 年前

    @Lauri Ranta的 do shell script 指针是有帮助的,但原始命令的一个简单变体可以做到这一点:

    尽管 执行shell脚本 调用 bash sh 因此,在它称之为“POSIX模式”的模式中,许多特定于bash的功能仍然可用,其中包括所谓的 此处字符串 通过stdin将字符串直接馈送到命令,例如: cat <<<'Print this' :

    因此,通过使用与一起传递的here字符串 quoted form of 来自AppleScript,这始终是可取的- echo 绕过问题:

    # Sample input.
    set input to "a\\\\b" # equivalent of" 'a\\b'
    
    # Remove all `\` characters; returns 'ab'
    set input to (do shell script "sed 's/\\\\//g' <<<" & quoted form of input)
    

    备选方案,使用 tr -d 而不是 sed :

     set input to (do shell script "tr -d '\\\\' <<<" & quoted form of input)