我的问题听起来微不足道,但我谷歌很多页面仍然无法找到答案。
我在Windows上。我有一个文本文件。如果我用Notepad ++打开它,它看起来像这个
我想尝试几件事
删除所有回车和换行
perl -i.bak -pe "s/\r\n//g" a.txt
\r
是CR
而\n
是LF
^function.*\r\n!
将匹配就像Notepad ++将
如果我们要缩进了!如果它的前一行以" function"开头,则会有一个天真的想法(实际上它的工作原理是记事本++)
perl -i.bak -pe "s/^(function.*\r\n)!/$1\t!/g" a.txt
但它没有用。如何正确地做到这一点?
答案 0 :(得分:3)
默认情况下,在Windows上,CR + LF在读取时转换为LF,LF在写入时转换为CR + LF。这使得线条看起来像是无论操作系统是否已经LF终止。
如果您想要将引导标签添加到以!
开头的行。
perl -i.bak -pe"s/^!/\t!/" a.txt
-or-
perl -i.bak -pe"s/^(?=!)/\t/" a.txt
你可能也试图避免在第一行上这样做。
perl -i.bak -pe"s/^!/\t!/ if $. > 1" a.txt
-or-
perl -i.bak -pe"s/^(?=!)/\t/ if $. > 1" a.txt
答案 1 :(得分:2)
with open("nea.json",'a+') as fs:
for area in soup.find('weatherForecast').find_all('area'):
fs.write(str(area.attrs))
即。只需将perl -i.bak -pe "s/\n//" a.txt
更改为\r\n
,\n
就会自动转换为Windows上的\r\n
,因为ikegami会对此进行解释。
\n
这里的要点是你需要将整个文件内容读入一个字符串才能进行跨行匹配。 perl -i.bak -0777 -pe "s/^(function.*?\n)!/\1\t!/gm" a.txt
参数指示Perl执行此操作(或者您可以将-0777
设置为Perl脚本中的空字符串。)