代码之家  ›  专栏  ›  技术社区  ›  thornomad

查找不以“<”开头的行,执行操作

  •  5
  • thornomad  · 技术社区  · 14 年前

    我正在使用vim,并且有一个包含 一些 扔掉的html。我正在为网络做准备,需要添加 <p></p> 标记到尚未格式化的行。以下是我的一个例子:

    Paragraph text one one line [... more ... ]
    Other paragraph text on the next line [... more ... ]  
    <h1>html element thrown in on its own line</h1>
    More paragraph text [... more ... ]  
    <!-- some other element (always own line) -->
    There is still more text!
    

    不要 从一开始 < <p></p> 标签。。。因此,之后,我的文件类似于:

    <p>Paragraph text one one line [... more ... ] </p>
    <p>Other paragraph text on the next line [... more ... ]   </p>
    <h1>html element thrown in on its own line</h1>
    <p>More paragraph text [... more ... ]   </p>
    <!-- some other element (always own line ) -->
    <p>There is still more text! </p>
    

    我怎样才能找到那条线 不要 配合起跑 < 性格

    5 回复  |  直到 14 年前
        1
  •  12
  •   John Gietzen    14 年前
    ^([^<].*)$
    

    确保您的选项不允许“点匹配换行”,并替换为:

    <p>$1</p>
    

    Vim要求您转义某些字符,但实际上我没有Vim,因此这是我对整个规则的最佳猜测:

    s:^\([^<].*\)$:<p>\1</p>:g
    
        2
  •  2
  •   user80168 user80168    14 年前
    :%s/^[^<].*/<p>&<\/p>/
    

    或者:

    :v/^</s#.*#<p>&</p>#
    

        3
  •  1
  •   ghostdog74    14 年前

    逻辑是这样的。检查文件,检查是否有错误 < 在行的开头,如果不在那里,则使用 <p> </p> 然后再重复一遍。真的不需要复杂的正则表达式

    猛击

    #!/bin/bash
    shopt -s extglob
    while read -r line
    do
        case "$line" in
            "<"*) echo $line ;;
            *) echo "<p>$line</p>";;
        esac   
    done <"file"
    

    $ awk '!/^</{$0="<p>"$0"</p>"}{print}' file
    

    输出

    $ awk '!/^</{$0="<p>"$0"</p>"}1' file
    <p>Paragraph text one one line [... more ... ]</p>
    <p>Other paragraph text on the next line [... more ... ]  </p>
    <h1>html element thrown in on its own line</h1>
    <p>More paragraph text [... more ... ]  </p>
    <!-- some other element (always own line) -->
    <p>There is still more text!</p>
    
        4
  •  0
  •   Maxim Kim    14 年前

    这应该起作用:

    :%s/^\s*[^<]\+$/<p>&<\/p>/g
    
        5
  •  0
  •   Matteo Riva    14 年前

    另一种方法是:

    :v/^</normal I<p>^O$</p>
    

    或者,如果您使用 surround.vim

    :v/^</normal yss<p>