背景
我有大量的Markdown文件,这些文件的代码块标记了三个背景和一个语言名称(github样式)。喜欢:
```ruby
def method_missing
puts "Where's the method?"
end
```
我想更改这些标记的方式,以便将代码块设置为凹痕(堆栈溢出样式),而不是使用三个背景,如下:
def method_missing
puts "Where's the method?"
end
问题
我正在使用此表达式
中的多个文件中的多个文件进行查找和重新安置(?s)```ruby(.*?)```
这有效地捕获了我想要的东西,但是我很难找到用自身的缩进版本替换捕获组$1
的好方法。充其量,我可以在整个捕获组之前插入一个软标签。
有什么建议吗?预先感谢。
另外:是否有一种快速的方法可以使用grep
使用BASH脚本来执行此操作?
您不能使用grep
执行此操作,但是您可以使用sed
(例如CC_4)的文本操作实用程序来完成此操作。例如,说:
sed -n '/```ruby/,/```/{/```ruby/b;/```/b;s/^/ /p }' filename
会产生:
def method_missing
puts "Where's the method?"
end
用于您的样品输入。
它捕获了```ruby
和三个背景之间的线;在这些线路前增加了4个空间;并打印那些。
如果您想要一个 tab 而不是这些whitespaces,请在上面的表达式中替换 s/^/ /p
。
我敢肯定,您可以获得一行工作,但是使用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