仅允许指定字符,否则应在UNIX中传输null

时间:2019-01-24 11:29:43

标签: shell unix sh

第二列中允许使用的字符为0到9,A到Z以及“ +”和“-”之类的符号,如果在第二列中找到允许的字符,则完整记录应为Transfer,否则应为null 输入

 - 1|89+ 
 - 2|-AB 
 - 3|XY* 
 - 4|PR%

输出

 - 1|89+ 
 - 2|-AB 
 - 3|<null> 
 - 4|<null>

grep -E '^[a-zA-Z0-9\+\-\|]+$' file > file1

但是上面的代码是如果找不到匹配项则丢弃完整记录,我需要所有记录,但是如果找到匹配项,则应该Transfer,否则为null Transfer。

2 个答案:

答案 0 :(得分:0)

使用sed替换管道之后的所有内容,该管道以数字,字母,正负号类中的零个或多个字符开头,后跟一个不在该类中的字符,直到字符串结尾为止。只是一个管道。

sed 's/\|[0-9a-zA-Z+-]*[^0-9a-zA-Z+-].*$/|/' file

答案 1 :(得分:0)

在受支持的地方使用awk和字符类:

$ awk 'BEGIN{FS=OFS="|"}$2~/[^[:alnum:]+-]/{$2=""}1' file
1|89+
2|-AB
3|
4|

在不受支持的地方(例如mawk)使用:

$ awk 'BEGIN{FS=OFS="|"}$2~/[^A-Za-z0-9+-]/{$2=""}1' file