在代码块的每一行的开头添加字符的脚本?

时间:2014-06-09 20:02:40

标签: bash grep

我有一个包含一些代码块的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脚本,但没有成功。

5 个答案:

答案 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

这应该与您指定的输出完全一致。