使用Automator.app逐行读取文本文件

时间:2014-07-20 17:34:34

标签: shell applescript automator

我是编码的新手所以请耐心等待。

我用Automator(OSX)创建了一个工作流程,工作正常。我唯一的问题是我希望它在许多输入上运行(即作为批处理)。我已经插入了Loop动作,但我遇到的问题是每次更改初始输入。

我想使用applescript每次都自动插入初始输入。

我有一个带URL的TXT文件。使用Apple脚本,我想将URL(或一行文本)复制到剪贴板。 在下一次迭代中,我想复制下一个URL(或文本行)。

有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:6)

您可以创建一个循环工作流程(称为 LinesToClipboard.workflow

  • 从文本文件中获取一行(不是rtf或doc)
  • 将该行复制到剪贴板
  • 运行您当前的工作流程
  • 再次循环下一行

工作流程:

  • 创建新的自动贩卖工作流程
  • 创建一个变量
    • 在底部找到“显示或隐藏工作流程变量列表”图标并显示工作流程警告(空)
    • 右键单击并“新变量...”
    • 将变量命名为“LineNumber”
  • 添加动作:
    • Get Value of Variable(LineNumber)
    • Run Shell Script
    • shell:/bin/bash
    • 重要:将Pass input更改为as arguments
    • 添加以下内容(准确复制,包含所有引号等):
    • 在脚本内容中,将/etc/passwd更改为文件名的完整路径,例如/Users/myname/Documents/myfile.txt
    • 在此操作结束时,剪贴板将包含文件中的一行
linenum=${1:-0}
filename="/etc/passwd" # full path of your text-filename
let linenum++
sed -n "${linenum}p" < "$filename" | pbcopy
echo $linenum
  • Set Value of Variable(LineNumber)
  • Run Workflow - 添加您当前的工作流程(或“ShowClipboard.workflow” - 请参见下文)
    • 应检查Wait for workflow to finish
    • 重要输出菜单应为:“返回操作输入”
  • Loop
    • 添加您的点数......
  • Run Shell Script(忽略此操作的输入),内容一行:echo 0(当循环结束时,这会将变量LineNumber重置为零)
  • Set Value of Variable(LineNumber)

为了进行测试,您可以使用内容创建另一个名为 ShowClipboard.workflow 的工作流程:

  • Get Contents of Cliboard
  • Set Value of Variable(clipval)
  • Ask for confirmation(并将(clipval)拖到消息字段中)

运行第一个工作流程。

截图(肯定):)

enter image description here

第二个工作流程(用于测试)

enter image description here

答案 1 :(得分:0)

您不需要AppleScript来获取URL,但可以使用shell任务直接使用Automator提取这些URL。使用获取文件夹内容的任务(这是Automator中的Finder任务)后,添加shell任务作为下一个任务。确保选择将输入作为参数发送,而不是将其发送到stdin。完成后,您只需要以下shell脚本之一。

cat $@ | egrep -io '\S?(http|https|ftp|afp|smb|mailto|webcal):\S+''

它首先使用cat读取所有文件。 $@是一个shell变量,包含上一个任务收集的参数:批处理文件夹的所有文件的路径列表。我们将它们传输到egrep将只输出由其方案过滤的URL。如果你想支持任何计划(官方和非官方计划):

cat $@ | egrep -io '\S?[A-Z][A-Z0-9+-.]+:\S+'