2

我怎样才能转换评论像

{{{
abc
def
}}}

降价评论,如

    abc
    def

(每行开头有 4 个空格)在 vim 或 sed 中?

我尝试了以下但我没有得到第一行之后的空格:

:%s/{{{\n\(\_.*\)\n}}}/    \1/
4

5 回答 5

4

用 vim:

:g/{{{/,/}}}/le 4|d|/}}}/d

解释:

  • :g/{{{/使用模式在每一行上运行一个命令{{{
  • ,/}}}/le 4从当前行到结尾左对齐}}}
  • d删除当前行
  • /}}}/d搜索匹配的行}}}并将其删除

根据您的缩进设置,使用>而不是le 4可能是排序器。

如需更多帮助,请参阅

:h :g
:h range
:h :left
:h :d
于 2012-11-20T15:37:05.680 回答
3

使用

awk '/{{{/{l=1;next}/}}}/{l=0} l{print"    "$0}' file.txt

或不那么神秘:

awk '/{{{/{l=1;next} /}}}/{l=0} l==1{print "    " $0}' file.txt
于 2012-11-20T15:31:16.283 回答
2
sed -i~ '/^{{{/,/^}}}/{/^{{{\|}}}/d;s;\(^.*$\);    \1;}' inFile
于 2012-11-20T15:25:12.450 回答
2

假设您的文本中没有\r对象,您可以在以下帮助下进行转换tr

tr '\n' '\r' \
| sed 's/{{{/\r{{{/;
       s/}}}/}}}\r/;
       :w;
         s/\r{{{\r}}}//;
         s/{{{\r\([^\r]*\)\r\(.*\)}}}/    \1\r{{{\r\2}}}/;
       tw' \
| tr '\r' '\n'

请注意,我在代码部分之前和之后添加了额外的一行,否则 markdown 将无法正确识别代码。

于 2012-11-20T15:35:41.297 回答
1

这可能对您有用(GNU sed):

sed '/^{{{/,/^}}}/{//d;s/^/    /}' file
于 2012-11-20T17:33:24.967 回答