【问题标题】:Insert Text Every 34 Character in a Text Document + MAC在文本文档中每 34 个字符插入文本 + MAC
【发布时间】:2013-06-27 04:54:47
【问题描述】:

我被困住了。我需要一个脚本来读取我的文本文档并在 34 个字符上插入自定义文本。这需要发生在我的文本文档中的每一行。

例子:

输入文本

`12345678912345678912345678912345  ABCD`
`12345678912345678912345678912345  EFGH`
`12345678912345678912345678912345  IJKL`
`12345678912345678912345678912345  MNOP`

输出文本

`12345678912345678912345678912345 custom text hereABCD`
`12345678912345678912345678912345 custom text hereEFGH`
`12345678912345678912345678912345 custom text hereIJKL`
`12345678912345678912345678912345 custom text hereMNOP`

我提供了可以在终端中工作的脚本。但是,如果有办法让它在 Applescript 中工作,那么当我将文件放到应用程序上时,它会提示并询问我要插入什么文本(这将是“此处的自定义文本”),然后点击 OK它会运行。

如果在 Applescript 中无法使用,Automator 也可以使用,但是我似乎无法让 Automator 使用该脚本。 Automator 的流程是:

1. Get Specified Finder Items
2. Run Shell Script

这运行正常,但不会更改文档。帮忙?

【问题讨论】:

  • 请准确说明您想要什么。预期的输入、预期的输出,以及到目前为止您尝试过的内容。

标签: macos shell applescript character


【解决方案1】:

在 Bash 中,您可以使用 while read -r -N 34 重复读取 34 个字符。未经测试的示例:

while IFS= read -r -N 34 || [[ -n "$REPLY" ]]
do
    printf '%s' "$REPLY"
    printf '%s\n' " custom text here"
done < input-file

更新:看起来 OP 想要在每行 #34 之后丢弃个字符:

while IFS= read -r || [[ -n "$REPLY" ]]
do
    printf '%s' "${REPLY:0:34}"
    printf '%s\n' " custom text here"
done < input-file

更新:OP 在这里,我已经根据您的精彩知识弄清楚了我需要做的一切!

while IFS= read -r || [[ -n "$REPLY" ]]
do
    printf '%s' "${REPLY:0:34}"
    printf '%s' "  Faux_Folder/"
    printf '%s\n' "${REPLY:36}"
done < input-file > output-file

【讨论】:

  • 逻辑看起来不错,但我怀疑这是否适用于包含换行符的文件。至少在我的 ubuntu 系统上失败了......
  • 也许我做错了什么。当我将它作为参数放入 Automators Shell 脚本时,首先要求获取指定的查找器项目,在它运行后它什么也不做。我已经尝试删除
  • @EvanGervais 为我和 anishsane 工作。您究竟运行了什么?究竟输入了什么?
  • 我首先进入终端并将目录更改为文本文件所在的桌面。然后我输入了提供更改“input.txt”以匹配我的文件名的 SED 脚本。这会返回错误“替代命令'}'中的错误标志。另一方面,这是我放入自动机的内容 1.获取指定的查找器项目(带入 DRIVE.TXT) 2.运行 Shell 脚本:同时 IFS= 读取 - r -N 34 || [[ -n "$REPLY" ]] do printf '%s' "$REPLY" printf '%s\n' " custom text here" done
  • 我终于让 bash 在终端中工作了。但是,我在第 34 个字符之后的同一行上作为文本的文件。有没有办法在一行的第 34 个字符计数处广告“此处的自定义文本”,然后跳到下一行并添加相同的文本?另外,脚本有没有办法输出带有更改的新文本文档?
【解决方案2】:

不确定这是否适用于 OSX(至少适用于 ubuntu。):

sed -n -E '1h;2,$H;${g;s/.{34}/& custom text here\n/gp}' input.txt

基本上,它会一直读取到文件末尾,然后在每 34 个字符后插入“custom text here\n”。

【讨论】:

  • 这个解决方案是时间优化的。其他解决方案是内存优化:-)
  • 我有另一个可以在 Mac OSX 上运行的“sed”脚本。我在 Automator 中设置了它以获取指定的查找器项目,然后运行一个 shell 脚本作为参数。但是,如果我使用上面的脚本,它不起作用。当然,我可能做错了什么。
  • 如果您系统上的默认 sed 是您的 sed 脚本,那么您可以尝试在我的解决方案中使用 sed 二进制文件的绝对路径而不是 sed
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 2019-05-14
  • 2013-05-01
  • 2022-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多