【发布时间】:2019-08-19 23:29:42
【问题描述】:
我有一个 Markdown 文件目录,我正在尝试通过以下方式完成以下任务:
- 获取markdown文件的文件名并将其存储在变量中
- 获取该变量并将文件中的一系列字符串替换为存储的文件名变量
- 遍历目录中的所有文件并执行相同的操作
我很接近,但以下代码仅提取第一个降价文件的文件名并将变量应用于文件中的所有字符串。到目前为止,这是我的工作代码:
#!/bin/bash
for file in /home/user/dir/*; do
str="somestring"
filename=$(basename $file)
fn="$(echo "${filename%.*}")"
find ./ -type f -exec sed -i '' -e "s/${str}/${fn}/g" {} \;
done
假设markdown文件是这样的:
123456789.md 和 /home/user/dir/123456789.md 以及其他几个具有其他随机数字名称的 .md 文件。
.md 文件的结构类似于:
---
layout: default
date: 2010-03-28
original: /orig/somestring.jpg
thumbnail: /thumb/somestring_thumb.jpg
permalink: /images/somestring/
---
我的目标是让脚本根据 .md 文件本身的文件名使每个文件看起来像这样:
---
layout: default
date: 2010-03-28
original: /orig/123456789.jpg
thumbnail: /thumb/123456789_thumb.jpg
permalink: /images/123456789/
---
对编辑 sed 调用的最佳方式或其他编写方式有何想法?在我的测试中,sed 偶尔会返回 sed: RE error: illegal byte sequence,但无论如何都会重命名字符串,即使它是错误的字符串。
【问题讨论】:
标签: linux bash macos scripting