regex - 用于验证 csv 字段的 Shell 脚本

标签 regex bash shell unix awk

我有一个包含 20 个字段的 csv 文件。我想要一个脚本来根据以下几点检查文件是否有效:

  • 它需要有 20 个由竖线分隔的字段。
  • 20 个字段中的每一个都应匹配一个正则表达式。
  • 知道任何正则表达式不匹配的行号和字段号。

例如:

f1|f2|f3|...|f20
1|aaaa|Y|...|2014/06/25
2|bb|Y...|2014/06/25
3|ccc|N...|2014/06/25

regex:
f1 [0-9]
f2 [a-z]{2,4}
f3 [YN]
.
.
.
f20 [1-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]

最好的 shell 工具是什么?有没有类似的脚本?

最佳答案

Unix 系统中最好的工具是 awk 来完成这项工作。您可以使用这样的 awk 命令:

awk 'BEGIN{FS=OFS="|"} NF!=20{print "not enough fields"; exit}
!($1~/^[0-9]$/) {print "1st field invalid"; exit}' file.csv

关于regex - 用于验证 csv 字段的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24419220/

相关文章:

java - 如果关注性能,Java 中字符串模式匹配的最佳方法

java - 如何在Gradle文件中的任务中执行多个Shell脚本

JavaScript http 正则表达式

PHP glob() 正则表达式模式

regex - 拆分带有乱码的字符串

linux - Shell 脚本 while 循环

php - Centos : TERM environment Variable Not Set

shell - 在 shell 脚本中使用 OR

git - "cmd: command not found"来自 git bash 中的 "start"命令(在 Windows 资源管理器中打开目录)?

c# - 在 Regex C# 中允许撇号、点、符号、数字和字符