You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AppleScript中通过Shell脚本实现换行符转换与指定行删除?

解决方案:结合Shell命令实现换行符转换+指定行删除

问题根源

你的AppleScript调用sed失效,是因为sed默认以Unix风格的换行符(LF)作为行边界识别标志,而文件中的回车符(CR)会被当作普通字符处理,导致sed无法正确解析行结构。

修改后的Shell命令逻辑

通过管道组合tr和sed命令,先统一换行符,再执行行删除操作,同时解决文件路径空格的解析问题:

-- 示例:批量处理时可循环替换thisFile和donefile
set thisFile to choose file with prompt "选择要处理的文件:"
set donefile to (path to desktop folder as text) & "处理完成_" & name of (info for thisFile)

do shell script "tr '\\r' '\\n' < " & quoted form of POSIX path of thisFile & " | sed -e '10,11d' -e '1,8d' > " & quoted form of POSIX path of donefile

各部分说明

  • tr '\\r' '\\n':将文件中的回车符(CR)转换为Unix换行符(LF),统一行结束格式,确保sed能正确识别行。
  • quoted form of POSIX path of ...:把AppleScript的HFS格式路径转为Shell可识别的POSIX路径,同时自动处理路径中的空格,避免Shell解析错误。
  • 管道|:将换行符转换后的内容直接传给sed处理,无需生成中间文件。
  • >:直接覆盖输出文件(若需追加内容可改回>>,但处理副本建议用覆盖避免重复内容)。

批量处理扩展

如果是批量处理文件夹中的文件,可通过循环遍历实现:

set sourceFolder to choose folder with prompt "选择源文件夹:"
set destFolder to choose folder with prompt "选择输出文件夹:"

tell application "Finder"
    set fileList to every file of sourceFolder whose kind is not "folder"
end tell

repeat with aFile in fileList
    set fileName to name of aFile
    set donefile to destFolder as text & "处理完成_" & fileName
    
    do shell script "tr '\\r' '\\n' < " & quoted form of POSIX path of aFile & " | sed -e '10,11d' -e '1,8d' > " & quoted form of POSIX path of donefile
end repeat

内容的提问来源于stack exchange,提问作者ijontichy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:46:06