Python 如何在空行后插入字符
我正在寻找一种在每行开头添加$字符的快速方法 在文件的每一个空行之后。 示例:输入文件Python 如何在空行后插入字符,python,regex,bash,sed,awk,Python,Regex,Bash,Sed,Awk,我正在寻找一种在每行开头添加$字符的快速方法 在文件的每一个空行之后。 示例:输入文件 text1 text2 text3 text4 text5 输出文件示例: text1 $text2 text3 $text4 text5 试一试 假设行是您的行列表: fixit = False for line in lines: if fixit and line.strip(): line = "$" + line
text1
text2
text3
text4
text5
输出文件示例:
text1
$text2
text3
$text4
text5
试一试
假设行是您的行列表:
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可避免在第二个空行的开头打印$。print openinput.txt.read.replace'\n\n','\n\n$'
给予
更新:
适用于处理多个连续空白:
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在评论中所指出的,此解决方案将所有输入加载到内存中,这可能会因输入的大小而出现问题。BTW在第一个解决方案中生成错误答案的反向引用不需要,因为可能会被使用。此解决方案将整个文件拖到内存中,因此如果文件较大,可能会导致问题。也就是说,可能是sed'1h;1.H、 美元!Dx;s/\n\n/&$/g'文件可能更清晰。啊,忘了更新压缩解决方案[Fixed]。我使用了back引用,因此它也支持连续的空行。你关于内存使用的评论很重要,我会把它添加到答案中。
awk '""~$0 {flag=1; print; next}; flag {printf "$"; flag=0} 1'
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
}'