0

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

text1  

text2    
text3  

text4  
text5 

示例输出文件:

text1  

$text2    
text3  

$text4  
text5
4

5 回答 5

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()打印 a 。$

于 2012-09-02T13:35:11.910 回答
2

尝试

sed 'N;s/^\s*\n/&$/;P;D' inputfile
于 2012-09-02T13:34:54.577 回答
2

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

于 2012-09-02T13:38:11.880 回答
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'
于 2012-09-02T13:42:37.020 回答
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在评论中指出的那样,此解决方案将所有输入加载到内存中,这可能会根据输入的大小出现问题。

于 2012-09-02T16:34:43.060 回答