我有一个包含一些代码块的markdown文件,格式如下:
This is some texte.
```
// Some code
var foo = 42;
```
Some more texte.
我要做的是添加字母'A> '在每一行代码块的开头。所以前一个文件的输出是:
This is some texte.
A> ```
A> // Some code
A> var foo = 42;
A> ```
Some more texte.
我该怎么做?我尝试使用grep创建一个bash脚本,但没有成功。
答案 0 :(得分:2)
这可以通过像这样的perl单线程来完成:
perl -pne '$_ = "A> $_" if /^`{3}/ ... /^`{3}/' file
这会将字符串"A> "
添加到以三个反引号开头的行之间的范围内。
为了就地编辑文件,最简单的方法是:
perl -pne '$_ = "A> $_" if /^`{3}/ ... /^`{3}/' file > tmp && mv tmp file
即。将输出重定向到新文件tmp
,然后如果命令已成功执行则覆盖file
。
答案 1 :(得分:0)
试试这个:
sed -E 's/(.*)/A> \1/g' textfile.txt > new_textfile.txt
其中textfile.txt包含您的代码。
答案 2 :(得分:0)
使用awk:
awk '!c && /```/{c=NR} c{$0 = "A> " $0} c<NR && /```/{c=0}1' file
This is some texte.
A> ```
A> // Some code
A> var foo = 42;
A> ```
Some more texte.
答案 3 :(得分:0)
使用awk
:
awk '/```/{ sub(/^/, "A> "); print; while (getline) { sub(/^/, "A> "); print; if (/```/) next; } }; 1' file
输出:
This is some texte.
A> ```
A> // Some code
A> var foo = 42;
A> ```
Some more texte.
答案 4 :(得分:0)
使用sed
:
sed '/^```/,/^```/s/^/A> /' file_in > file_out
这应该与您指定的输出完全一致。