我正在寻找一种快速的方法来在文件的每个空白行之后的每一行的开头添加一个“$”字符。示例:输入文件
text1
text2
text3
text4
text5
示例输出文件:
text1
$text2
text3
$text4
text5
假设这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 。$
尝试
sed 'N;s/^\s*\n/&$/;P;D' inputfile
print open("input.txt").read().replace('\n\n', '\n\n$')
awk '{print}; ""~$0 {getline; print "$" $0}' input_file
给
text1
$text2
text3
$text4
text5
更新:
适用于处理多个连续的空白:
awk '""~$0 {flag=1; print; next}; flag {printf "$"; flag=0} 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在评论中指出的那样,此解决方案将所有输入加载到内存中,这可能会根据输入的大小出现问题。