我有一大批markdown文件,其代码块标有三个反引号和一个语言名称(github样式)。像这样:
```ruby
def method_missing
puts "Where's the method?"
end
```
我想更改这些标记的方式,以便不使用三个反引号,代码块设置为缩进(堆栈溢出样式),如下所示:
def method_missing
puts "Where's the method?"
end
我正在使用此表达式
在Sublime Text中的多个文件中进行查找和替换(?s)```ruby(.*?)```
这有效地捕获了我想要的内容,但是我找不到用自己的缩进版本替换捕获组$1
的好方法。我最多可以在整个捕获组之前插入一个软选项卡。
有什么建议吗?提前谢谢。
或者:使用grep
使用bash脚本是否可以快速执行此操作?
答案 0 :(得分:2)
您无法使用grep
执行此操作,但可以使用sed
等文本操作实用程序执行此操作。例如,说:
sed -n '/```ruby/,/```/{/```ruby/b;/```/b;s/^/ /p }' filename
会产生:
def method_missing
puts "Where's the method?"
end
您的样本输入。
它捕获```ruby
和三个反引号之间的线条;在这些线前添加4个空格;并打印出那些。
如果您想要 TAB 字符而不是那些空格,请在上面的表达式中将s/^/ /p
替换为s/^/\t/p
。
答案 1 :(得分:1)
我确定你可以使用一行来运行,但使用shell脚本可能更简单
#!/bin/bash
while IFS= read -r line; do
if [[ $line =~ ^'```ruby' ]]; then
indent=true
elif [[ $line =~ ^'```' ]]; then
indent=
else
[[ -n $indent ]] && echo -e "\t$line" || echo "$line"
fi
done < file