perl命令用法

01. 命令概述

perl命令是perl语言解释器,负责解释执行perl语言程序。

02. 命令格式

用法:perl [选项] [参数]

03. 常用选项

-o 以八进制数形式指定输入记录的分隔符(也保存在perl中的特殊变量$/中)
-a 当和-n或者-p一起使用时启动自动拆分模式.这种模式可以拆分输入的行,并把它们放置在名为@F的专门数组中
-c 使perl检查脚本的语法,然后退出
-C 使perl能够在目标系统中使用原始的宽字符API.
-d 在perl调试程序下运行脚本
-e 使用命令行,
-F 如果使用了-a,该参数可以用来指定所拆分的模式
-h 打印出所有选项的汇总
-i 指出被<>结构处理的文本
-I 使perl为模块搜索目录
-l 添加行结束处理,当和-n与-p开关一起使用,这个开关能自动把$/从输入数据中删除,并把$\(输出记录分隔符)设置为octnum,这样打印语句就可以使用该分隔符了.
-m[-]module 在执行脚本前,把指定模块包含在脚本中
-n 让perl在脚本中试用while(<>)循环
-p 让perl把下面循环添加到脚本中:
-P perl编译之前,通过C预设处理程序来运行自己的脚本
-s 在命令行中允许要进行开关解析
-S 让perl试用PATH环境变量来搜索脚本
-T 强制打开错误检查
-u 在编译了脚本后,导致perl清楚内核
-U 允许perl进行不安全的操作,如删除目录等
-v  打印出perl的版本及包的级别
-V:name 打印出指定的配置变量的汇总
-w 打印出警告信息
-W 无论no warnings或$^W的状态是什么,都启动警告信息
-x directory 通知perl脚本嵌入到消息中,文本不会被处理,知道第一行代码以#!开头并包含了字符"perl"
-X 无论use warnings或$^W的状态是什么,都禁止警告信息
– 可选, 表示使用的这些开关的结束位置

04. 参考示例

4.1 解析Perl程序

[root@localhost tmp]$ perl test.sh
hello world
[root@localhost tmp]$ 

4.2 其它用法

# perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c    #将所有C程序中的foo替换成bar,旧文件备份成.bak

# perl -i.bak -pe 's/(\d+)/ 1 + $1 /ge' file1 file2 …    #将每个文件中出现的数值都加一

# perl -pie 's/\r\n/\n/g' file   #将换行符\r\n替换成\n

# perl -pie 's/\n/\r\n/g' file  #将换行符\n替换成\r\n

# perl -lane 'print "@F[0..4] $F[6]"' file   #显示字段0-4和字段6,字段的分隔符是空格

# perl -F: -lane 'print "@F[0..4]\n"' /etc/passwd     #字段分隔符不是空格而是冒号

# perl -ne 'print if /^START$/ .. /^END$/' file   #显示START和END之间的部分

# perl -ne 'print unless /^START$/ .. /^END$/' file   #不显示START和END之间的部分

# perl -pe 'exit if $. > 50′ file    #显示开头50行

# perl -ne 'print unless 1 .. 10′ file   #不显示开头10行

# perl -ne 'print if 15 .. 17′ file  #显示15行到17行

# perl -lne 'print substr($_, 0, 80) = ""' file  #每行取前80个字符

# perl -lne 'print substr($_, 10) = ""' file  #每行丢弃前10个字符

# perl -ne 'print if /comment/' duptext     #查找comment字符串

# perl -ne 'print unless /comment/' duptext    #查找不含comment字符串的行

# perl -ne 'print if /comment/ || /apple/' duptext    #查找包含comment或apple的行

# perl -lane 'print $F[4] + $F[-2]'    #计算字段4和倒数第二字段之和

# perl -e 'print sort <>' file   #文件按行排序

# perl -00 -e 'print sort <>' file   #文件按段落排序

# perl -0777 -e 'print sort <>' file1 file2   #多个文件按文件内容排序,并返回合并后的文件

# perl -e 'print reverse <>' file1      #文件按行反转

# perl -ne 'printf "%x\n",$_'     #10进制转16进制

# perl -ne 'printf "%o\n",$_'    #10进制转8进制

# perl -ne 'print hex($_)."\n"'   #16进制转10进制

# perl -ne 'print oct($_)."\n"'   #8进制转10进制

# perl -ne 'print eval($_)."\n"'   #简易计算器

05. 来源

参考:https://blog.csdn.net/dengjin20104042056/article/details/101426060

H3C ER3208G3 配置端口映射

先来个官网教程:

https://www.h3c.com/cn/d_202201/1538914_30005_0.htm#_Toc94281135

配置虚拟服务器
(1)     单击导航树中[网络设置/NAT配置]菜单项,进入NAT配置页面。
(2)     单击“虚拟服务器”页签,进入虚拟服务器配置页面。
(3)     在“NAT DMZ服务”配置项处,勾选“开启”选项,开启NAT DMZ服务。
(4)     在“主机地址”配置项处,输入NAT DMZ服务的主机地址。
(5)     点击<应用>按钮,完成配置。
(6)     点击<添加>按钮,弹出添加NAT端口映射对话框。
(7)     在“协议类型”配置项处,选择协议为“TCP”、“UDP”或“TCP+UDP”。此处需要根据内部服务器采用的传输层协议类型选择TCP或UDP,例如FTP服务器采用TCP协议,TFTP采用UDP协议。
(8)     在“外部地址”配置项处,可以选择使用当前端口的IP地址,也可以使用设备上的其它公网IP地址。
(9)     在“外部端口”配置项处,选择FTP、Telnet或自定义端口。如果您对外提供的服务不是FTP或Telnet,请输入提供的服务所使用的端口号,比如HTTP服务端口号80。
(10)     在“内部地址”配置项处,输入允许外部网络访问的内网IP地址。
(11)     在“内部端口”配置项处,输入内部网络资源使用的端口号。
(12)     在“是否启用”配置项处,选择是否立即启用映射。
(13)     点击<确定>按钮,完成配置。

搞完了,结果映射根本没起作用,这脑壳疼哦。为什么不起作用呢?下面重点来了:

在高级配置中开启NAT hairpin,否则映射无效,如下图所示:

H3C ER3208G3 配置端口映射,开启NAT hairpin