我正在寻找一种快速添加" $"每行开头的字符 在文件的每个空行之后。 示例:输入文件
text1
text2
text3
text4
text5
示例输出文件:
text1
$text2
text3
$text4
text5
答案 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 所述,此解决方案将所有输入加载到内存中,这可能会有问题,具体取决于输入的大小。