- 帖子
- 3151
- 积分
- 6455
- 技术
- 317
- 捐助
- 70
- 注册时间
- 2008-8-3
|
2楼
发表于 2017-5-8 23:19
| 只看该作者
Chapter 2. 换行和间隔符
本帖最后由 523066680 于 2017-5-12 15:16 编辑
最近是 真·工作繁忙,只能拖延了。(前几天逛亚马逊发现 Fluent Python 即将出中文版,价格过百,从目录来看干货蛮多(哦 这里是 Perl 区))
Chapter 2 - 换行和间隔符
在每行的末尾增加空白行
perl -pe "$\=\"\n\"" f.txt
之前对 -p 和 -e 参数做过简要的说明,以上代码相当于:
while (<>) {
$\ = "\n";
} continue {
print or die "-p failed: $!\n";
} |
构成
-p 参数建立 while (<>) {} continue { print } 循环结构
在 while 循环内默认用 $_ 存储当前读入的行,而 print 的缺省参数为 $_
-e "代码" 对应 while 循环内的代码。
continue 语句块在 while 的每次循环末尾继续执行,
特点是 continue {} 的代码不会因为 next 而跳过
特殊变量 $\ 相当于 AWK 中的 ORS 变量 (Output Record S eparator) 。
$\ 的内容将自动追加到 $_ 的末尾。循环地为 $\ 赋相同的值是不必要的,
将其放在 BEGIN 代码块可以节省开销(BEGIN代码块优先执行):
perl -pe "BEGIN { $\=\"\n\" } " f.txt
相当于:
BEGIN { $\ = "\n" }
while (<>) {
} continue {
print or die "-p failed: $!\n";
} |
其他方案
通过 "." 操作符添加换行:
perl -pe "$_ .= \"\n\"" f.txt
或者使用s///正则替换:
perl -pe 's/$/\n/' f.txt
甚至可以利用 say 操作符的特性(Perl 5.10 或以上):
perl -nE 'say' f.txt
-E 参数允许打开所有 Perl 的可选特性(为了支持 say 操作符)
-n 参数类似 -p ,遍历所有读入的行但不主动 print(前面介绍过了)
say 操作符类似 print,但 say 总是在每行的末尾添加 "\n"
最后,别忘了多用 perldoc, 执行 perldoc perlrun 查看perl命令行参数的详细说明
换行加倍,空行除外
perl -pe "$_ .= \"\n\" unless /^$/" f.txt
unless 在 perl 中是 if not 的意思
/^$/ 表示行的开头和末尾之间没有其他字符
也可以用 \S 筛选:
perl -pe "$_ .= \"\n\" if /\S/" f.txt
\s 代表一系列空白符号
\S 表示空白以外的字符
如果一行中包含空给以外的字符,则追加 \n
三倍换行符
相信各位已经能举一反三,不解释了(后面的命令行示例省去文件名部分)
perl -pe "$\ = \"\n\n\""
perl -pe "$_ .= \"\n\n\""
perl -pe "s/$/\n\n/"
N倍换行符
Perl 使用 "字符"x数字 的方式对字符串翻倍叠加,例如7个换行符:`"\n"x7`
在每行之前添加空行
使用正则替换向文件开头插入\n:
perl -pe 's/^/\n/'
删除空白行
perl -ne 'print unless /^$/'
由于这里要自己判断(筛选)输出,所以使用 -n 而非 -p
[Finished in 0.8s] |
-
1
评分人数
-
|