Разрешить только указанный символ, иначе ноль должен передаваться в Unix - PullRequest
0 голосов
/ 24 января 2019

Допустимые символы во 2-х столбцах - от 0 до 9, от A до Z и такие символы, как «+» и «-», если разрешенный символ найден во 2-м столбце, тогда полная запись должна быть «Передача», иначе ноль должен быть «Передать во 2-й столбец» Ввод

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

Ввод

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

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

но приведенный выше код отбрасывает полную запись, если совпадение не найдено, Мне нужны все записи, но если совпадение найденотогда следует перенести еще ноль переноса.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Использование классов 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
0 голосов
/ 24 января 2019

Используйте sed для замены всего, что находится после канала, начинающегося с нуля или более символов в классе цифр, букв, плюс или минус, за которым следует один символ, отсутствующий в этом классе, до конца строки с каналомтолько.

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