正则表达式替换markdown文件代码块标记中的所有空格
Posted
技术标签:
【中文标题】正则表达式替换markdown文件代码块标记中的所有空格【英文标题】:Regex to replace all spaces in the code block marker of markdown file 【发布时间】:2021-08-29 14:43:59 【问题描述】:我想在每个降价文件的代码块标记中用一个逗号替换每组空格。
例如我有这个代码块:
```html class1 class2
注意上面一行有两组空格,一组有3个空格,另一组有一个空格。
我想将其替换为:
```html,class1,class2
我尝试了以下命令但没有成功:
find src -type f -name "*.md" -exec sed -i s/^(?<=```)( )+/,/g +
含义:如果一行的开头包含 ``` 则用逗号替换所有空格。 但它不起作用。
我应该在这里使用什么正确的命令?
【问题讨论】:
您需要使用-E
来使用像()+
这样的元字符,并且sed
不支持环视。另见:Why does my regular expression work in X but not in Y?
my answer 为您工作了吗?您需要更多帮助吗?
【参考方案1】:
你可以使用
sed -E '/^```/ s/[[:space:]]+/,/g' file
查看online demo
详情:
-E
启用 POSIX ERE 语法
/^```/
- 如果该行以 ```
开头,则继续执行后续命令
s/[[:space:]]+/,/g
- 用一个 ,
字符替换一个或多个空格。
s='```html class1 class2
html class3 class4'
sed -E '/^```/ s/[[:space:]]+/,/g' <<< "$s"
输出:
```html,class1,class2
html class3 class4
【讨论】:
@TuyenPham 欢迎您提出一个有趣的问题。【参考方案2】:这会做到(使用 GNU sed):
sed '/^```/ s/\s\+/,/g' your_file
它的工作方式如下:
对于以三个反引号开头的行.../^```/
替换所有(g
表示全局替换)出现的一个或多个空格
(\s
表示空格,\+
表示一个或多个)带逗号
一旦您确认它符合您的要求,只需添加 -i
即可
就地替换:
sed -i '/^```/ s/\s\+/,/g' your_file
【讨论】:
【参考方案3】:在每个 Unix 机器上的任何 shell 中使用任何 awk:
$ awk -v OFS=',' '/^```/$1=$1 1' file
```html,class1,class2
如果您想进行“就地”编辑(就像您使用 GNU sed for sed -i
一样)然后使用 GNU awk 并使其成为 awk -i inplace -v OFS=',' '/^```/$1=$1 1' file
【讨论】:
以上是关于正则表达式替换markdown文件代码块标记中的所有空格的主要内容,如果未能解决你的问题,请参考以下文章
如何避免使用 Python re 库删除文本文件中正则表达式标志之间的文本块?