【问题标题】:Regex to replace all spaces in the code block marker of markdown file正则表达式替换markdown文件代码块标记中的所有空格
【发布时间】:2021-08-29 14:43:59
【问题描述】:

我想在每个降价文件的代码块标记中用一个逗号替换每组空格。

例如我有这个代码块:

```html   class1 class2

注意上面一行有两组空格,一组有3个空格,另一组有一个空格。

我想将其替换为:

```html,class1,class2

我尝试了以下命令但没有成功:

find src -type f -name "*.md" -exec sed -i s/^(?<=```)( )+/,/g {} +

含义:如果一行的开头包含 ``` 则用逗号替换所有空格。
但它不起作用。

我应该在这里使用什么正确的命令?

【问题讨论】:

标签: regex sed replace


【解决方案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

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 2015-01-19
      • 2021-04-24
      • 2021-05-18
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多