空格字符弄乱了用于提取 Markdown 链接的 shell 脚本 grep 模式 (macOS)
我正在开发一个将 markdown 文件转换为文本包的工具,修改 Zett 的一段很棒的代码 在 macOS 上使用,因为我将把我的 Apple Notes 文件移植到 Craft。
我在使用 grep 将所有链接解析为数组时遇到问题。无论我多么努力地尝试使用像 --null
和 | 这样的选项xargs -0
,结果最终被空格字符分割:
targets=($(grep '!\[.*\](.*)' "$inFile"))
示例:我有一个包含以下内容的小型 Markdown 测试文件:
# Allan Falk - ComicWiki
**Allan Falk - ComicWiki**
![Allan Falk - ComicWiki](images/Allan%20Falk%20-%20ComicWiki.png)
http://comicwiki.dk/wiki/Allan_Falk
运行上面的代码会创建以下数组,其中 Markdown 链接像这样被分割:
![Allan
Falk
-
ComicWiki](images/Allan%20Falk%20-%20ComicWiki.png)
我怎样才能获得完整的链接作为单独的数组条目(它们将在稍后单独处理,使用 sed
复制文件等)?
I am working on a tool to convert markdown files to text bundles, revising a great piece of code from Zett to use on macOS since I will be porting my Apple Notes files to Craft.
I have problems parsing all links into an array using grep. No matter how hard I try using options like --null
and | xargs -0
, the result ends up being split by whitespace characters:
targets=($(grep '!\[.*\](.*)' "$inFile"))
An example: I have a small markdown test file containing the following:
# Allan Falk - ComicWiki
**Allan Falk - ComicWiki**
![Allan Falk - ComicWiki](images/Allan%20Falk%20-%20ComicWiki.png)
http://comicwiki.dk/wiki/Allan_Falk
Running the above code creates the following array in where the markdown link is split up like so:
![Allan
Falk
-
ComicWiki](images/Allan%20Falk%20-%20ComicWiki.png)
How can I get complete links as individual array entries (they will be processed later individually, using sed
for copying files etc.)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以设置
IFS=
(空值)并使用如下读取:<(grep '!\[.*\]' file)
运行grep< /code> 使用进程替换和
<
,然后将此命令的输出发送到read
工作演示
You can set
IFS=
(null value) and use read like this:<(grep '!\[.*\]' file)
runsgrep
using process substitution and<
before that sends output of this command toread
Working Demo
经过一番挖掘后,我发现我的陈述中缺少引文。因此,我不需要写:
我需要在第一组括号内添加引号:
现在数组工作正常 - 不会发生空格分割。
After doing some digging, I found out that I was missing quotations in my statement. So instead of writing:
I needed to add quotation marks inside the first set of brackets:
Now the array works fine – no whitespace splitting occurs.