
# 正则表达式分隔半结构化文本
在创建表/文件迁移作业时，对简单CSV格式的文件，CDM可以使用字段分隔符进行字段分隔。但是对于一些复杂的半结构化文本，由于字段值也包含了分隔符，所以无法使用分隔符进行字段分隔，此时可以使用正则表达式分隔。
正则表达式参数在源端作业参数中配置，要求源连接为对象存储或者文件系统，且"文件格式"必须选择"CSV格式"。
图1正则表达式参数   
![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001917230109.png "点击放大")
在迁移CSV格式的文件时，CDM支持使用正则表达式分隔字段，并按照解析后的结果写入目的端。正则表达式语法请参考对应的相关资料，这里举例下面几种日志文件的正则表达式的写法：
- [Log4J日志]
- [Log4J审计日志]
- [Tomcat日志]
- [Django日志]
- [Apache server日志]
 
 #### Log4J日志
- 日志样例：
  ```
  2018-01-11 08:50:59,001 INFO  [org.apache.sqoop.core.SqoopConfiguration.configureClassLoader(SqoopConfiguration.java:251)] Adding jars to current classloader from property: org.apache.sqoop.classpath.extra
  ```
  
- 正则表达式为：
  ```
  ^(\d.*\d) (\w*)  \[(.*)\] (\w.*).*
  ```
  
- 解析出的结果如下：
  表1Log4J日志解析结果 
  | 列号 | 样值                                                                                         |
  |:---|:---|
  | 1  | 2018-01-11 08:50:59,001                                                                    |
  | 2  | INFO                                                                                       |
  | 3  | org.apache.sqoop.core.SqoopConfiguration.configureClassLoader(SqoopConfiguration.java:251) |
  | 4  | Adding jars to current classloader from property: org.apache.sqoop.classpath.extra         |
     
  
 
 #### Log4J审计日志
- 日志样例：
  ```
  2018-01-11 08:51:06,156 INFO  [org.apache.sqoop.audit.FileAuditLogger.logAuditEvent(FileAuditLogger.java:61)] user=sqoop.anonymous.user    ip=189.xxx.xxx.75    op=show    obj=version    objId=x
  ```
  
- 正则表达式为：
  ```
  ^(\d.*\d) (\w*)  \[(.*)\] user=(\w.*)    ip=(\w.*)    op=(\w.*)    obj=(\w.*)    objId=(.*).*
  ```
  
- 解析结果如下：
  表2Log4J审计日志解析结果 
  | 列号 | 样值                                                                            |
  |:---|:---|
  | 1  | 2018-01-11 08:51:06,156                                                       |
  | 2  | INFO                                                                          |
  | 3  | org.apache.sqoop.audit.FileAuditLogger.logAuditEvent(FileAuditLogger.java:61) |
  | 4  | sqoop.anonymous.user                                                          |
  | 5  | 189.xxx.xxx.75                                                                |
  | 6  | show                                                                          |
  | 7  | version                                                                       |
  | 8  | x                                                                             |
     
  
 
 #### Tomcat日志
- 日志样例：
  ```
  11-Jan-2018 09:00:06.907 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
  ```
  

- 正则表达式为：
  ```
  ^(\d.*\d) (\w*) \[(.*)\] ([\w\.]*) (\w.*).*
  ```
  
- 解析结果如下：
  表3Tomcat日志解析结果 
  | 列号 | 样值                                                    |
  |:---|:---|
  | 1  | 11-Jan-2018 09:00:06.907                              |
  | 2  | INFO                                                  |
  | 3  | main                                                  |
  | 4  | org.apache.catalina.startup.VersionLoggerListener.log |
  | 5  | OS Name:Linux                                         |
     
  
 
 #### Django日志
- 日志样例：
  ```
  [08/Jan/2018 20:59:07 ] settings     INFO     Welcome to Hue 3.9.0
  ```
  
- 正则表达式为：
  ```
  ^\[(.*)\] (\w*)     (\w*)     (.*).*
  ```
  
- 解析结果如下：
  表4Django日志解析结果 
  | 列号 | 样值                   |
  |:---|:---|
  | 1  | 08/Jan/2018 20:59:07 |
  | 2  | settings             |
  | 3  | INFO                 |
  | 4  | Welcome to Hue 3.9.0 |
     
  
 
 #### Apache server日志
- 日志样例：
  ```
  [Mon Jan 08 20:43:51.854334 2018] [mpm_event:notice] [pid 36465:tid 140557517657856] AH00489: Apache/2.4.12 (Unix) OpenSSL/1.0.1t configured -- resuming normal operations
  ```
  
- 正则表达式为：
  ```
  ^\[(.*)\] \[(.*)\] \[(.*)\] (.*).*
  ```
  
- 解析结果如下：
  表5Apache server日志解析结果 
  | 列号 | 样值                                                                                    |
  |:---|:---|
  | 1  | Mon Jan 08 20:43:51.854334 2018                                                       |
  | 2  | mpm_event:notice                                                                      |
  | 3  | pid 36465:tid 140557517657856                                                         |
  | 4  | AH00489: Apache/2.4.12 (Unix) OpenSSL/1.0.1t configured -- resuming normal operations |
     
  
 
