如何在空行后插入一个字符

时间:2012-09-02 13:27:42

标签: python regex bash sed awk

我正在寻找一种快速添加" $"每行开头的字符 在文件的每个空行之后。 示例:输入文件

text1  

text2    
text3  

text4  
text5 

示例输出文件:

text1  

$text2    
text3  

$text4  
text5

5 个答案:

答案 0 :(得分:3)

假设lines是您的行列表:

fixit = False
for line in lines:
    if fixit and line.strip():
        line = "$" + line
    fixit = (line.strip() == "")
    print line

fixit = (line.strip() == "")是检查当前行是否为空的测试[.strip方法删除所有空白字符(" ""\n",... )在你的行的开头和结尾]。

如果一行中有两个空行,if fixit and line.strip()可以避免在第二个空行的开头打印$

答案 1 :(得分:2)

尝试

sed 'N;s/^\s*\n/&$/;P;D' inputfile

答案 2 :(得分:2)

print open("input.txt").read().replace('\n\n', '\n\n$')

答案 3 :(得分:2)

awk '{print}; ""~$0 {getline; print "$" $0}' input_file

给出

text1

$text2
text3

$text4
text5

<强>更新
适合处理多个连续的空白:

awk '""~$0 {flag=1; print; next}; flag {printf "$"; flag=0} 1'

答案 4 :(得分:1)

使用GNU sed的另一种方法:

sed -rn '1 h; 1!H; $ {x; s/(\n\n)(.)/\1$\2/g; p}' infile

并发表评论:

sed -rn '
  1h                     # First collect all input 
  1!H                    # in the hold space 
  $ {
    x                    # Swap hold space and pattern space
    s/(\n\n)(.)/\1$\2/g  # Globally insert $ after empty lines
    p                    # Print the result
  }'

正如注释中 potong 所述,此解决方案将所有输入加载到内存中,这可能会有问题,具体取决于输入的大小。