Вы можете добавить параметр --exclude='*/'
в параметры rsync, чтобы предотвратить синхронизацию каталогов.
Когда вы говорите \w+
, я предполагаю, что вы на самом деле имеете в виду [a-zA-Z]
, поскольку \w
также соответствует числам и знакам подчеркивания, и похоже, что вам нужны только буквы. На самом деле, исходя из вашего примера, вам могут понадобиться только заглавные буквы. Наконец, и снова я предполагаю, что, поскольку вы не объясняете, похоже, вы хотите исключить случаи, когда длина строки букв не составляет ровно 3 символа. Если да, вот способ сделать то, что вы хотите в Perl:
$ perl -lne '/^(.*?),[A-Z]{3},\d{2},/; $start=$1; @k=(/,(\w{3},\d{2})/g); print "$start,", join("|",@k)' file
1,123-456,IND,91|UAE,97|USA,01
3,345-678,AUS,61|SLA,94|NZW,64
В качестве альтернативы, если вы хотите найти совпадения только после второго поля, вы можете сделать это в awk:
$ awk -F, -v OFS="," '{
for(i=3;i<=NF;i+=2){
if ($i~/^[A-Z]{3}$/ && $(i+1)~/^[0-9]{2}$/){
k ? k=k"|"$i","$(i+1) : k=$i","$(i+1);
}
} print $1,$2,k; k=""}' file
1,123-456,IND,91|UAE,97|USA,01
3,345-678,AUS,61|SLA,94|NZW,64