• Perl一行式:文本编解码、替换


    perl一行式程序系列文章Perl一行式


    文本大小写转换

    全部字符转换成大写或小写,有几种方式:

    # 转大写
    $ perl -nle 'print uc' file.log
    $ perl -ple '$_ = uc' file.log
    $ perl -nle 'print "U$_"' file.log
    
    # 转小写
    $ perl -nle 'print lc' file.log
    $ perl -ple '$_ = lc' file.log
    $ perl -nle 'print "L$_"' file.log
    

    每行首字母大小写转换:

    $ perl -nle 'print lcfirst' file.log
    $ perl -lpe '$_ = ucfirst' file.log
    $ perl -lne 'print uL$_' file.log
    

    单词首字母大写,其它小写:

    $ perl -ple 's/(w+)/u$1/g' file.log
    

    修剪前缀、后缀空白

    去掉前缀空白的方式:

    $ perl -ple 's/^s+//' file.log
    

    去掉后缀空白的方式:

    $ perl -lpe 's/s+$//' file.log
    

    同时去掉前缀和后缀空白:

    $ perl -lpe 's/^s+|s+$//' file.log
    

    反序输出所有段落

    $ perl -00 -e 'print reverse <>' file.log
    

    前面的文章压缩连续的空行解释过,-00是按段落读取且压缩连续的空行。

    reverse <>中reverse的操作对象期待的是一个列表,所以<>会一次性读取整个文件且按照段落读取,每个段落是列表中的一个元素。最后reverse函数反序这个列表,然后被print输出。

    反序输出所有行

    $ perl -e 'print reverse <ARGV>' file.log
    sync   x 4 65534 sync   /bin      /bin/sync
    sys    x 3     3 sys    /dev      /usr/sbin/nologin
    bin    x 2     2 bin    /bin      /usr/sbin/nologin
    daemon x 1     1 daemon /usr/sbin /usr/sbin/nologin
    root   x 0     0 root   /root     /bin/bash
    

    这里reverse <ARGV>表示一次性读取file.log的所有行并进行反转。

    也可以使用下面这种方式,但如果文件结尾不正确(缺少eof),可能会卡住:

    $ perl -e 'print reverse <>' file.log
    

    ROT13字符映射

    Perl中可使用tr///y///进行字符一一映射的替换。它们和unix下的tr命令作用类似。

    $ perl -le '$string="hello";$string =~ y/a-zA-Z/N-Za-mA-Mn-z/;print $string'
    URYYb
    

    BASE64编码、解码

    MIME::Base64模块提供了base64编码、解码的方法。

    编码:

    $ perl -MMIME::Base64 -e 'print encode_base64("coding")'
    Y29kaW5n
    

    解码:

    $ perl -MMIME::Base64 -le 'print decode_base64("Y29kaW5n")'
    coding
    

    编码文件:

    $ perl -MMIME::Base64 -0777 -ne '
        print encode_base64($_)' file.log
    

    解码文件:

    $ perl -MMIME::Base64 -0777 -ne 'print decode_base64($_)' file
    

    URL转义

    使用URI::Escape模块即可进行URL转义。该模块需要额外安装cpan URI::Escape

    $ perl -MURI::Escape -le 'print uri_escape("http://example.com")'
    http%3A%2F%2Fexample.com 
    

    反转义:

    $ perl -MURI::Escape -le '
        print uri_unescape("http%3A%2F%2Fexample.com")'
    http://example.com
    

    HTML编码、解码

    先安装额外HTML格式的编解码模块cpan HTML::Entities

    $ perl -MHTML::Entities -le 'print encode_entities("<html>")'
    $ perl -MHTML::Entities -le 'print decode_entities("&lt;html&gt;")'
    
  • 相关阅读:
    spring容器与java访问权限的关系!
    Mybatis初始化过程详解
    Spring-boot 一些常用注解说明!
    JNDI + Spring 如何读取数据
    HashMap,,ConcurrentHashMap------------------浅谈!!
    spring ioc容器和spring mvc 容器--------浅谈!!
    针对xml文件做提取与写入的操作
    vim编辑器显示行号
    ubuntu双系统修复windows引导
    git基本操作
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/10243772.html
Copyright © 2020-2023  润新知