Algumas coisas que notei sobre sua expressão regular:
- Ao especificar uma classe de caractere, você não usa vírgulas entre as letras. Você pode usar traços para especificar intervalos, mas, nesse caso, em vez de
[C,S,R,P,Q]
, ele deve ser[CSRPQ]
. - sed não requer que você corresponda a linha inteira, então você pode apenas construir um padrão para combinar com os números com a letra final, e então substituí-lo pelo número por si mesmo (soltando a letra) .
Eu peguei o arquivo de entrada que você forneceu e testei o seguinte comando sed :
sed -E 's/([0-9]+)[CSRPQ]//g' sample.txt
Isso produz a seguinte saída:
USC00020958 -7777 656 721 803 891 975 972 941 906 809 695 605
USC00021001 378 389 448 522 628 736 774 742 674 562 454 376
USC00021026 689 729 792 873 969 1060 1082 1068 1015 903 775 682
USC00021050 663 713 796 885 984 1079 1122 1103 1036 904 754 651
USC00501466 -77 8 168 408 593 723 733 660 529 273 54 -7
USW00501492 -43 18 132 308 510 666 687 605 466 239 45 12
USW00501497 3 -1 0 203 388 539 558 493 362 175 51 27
USW00501684 -118 0 211 413 573 700 710 644 520 294 35 -67
USW00501926 184 223 303 418 544 651 661 617 519 353 227 -7777
O comando está combinando com qualquer número que tenha um [CSRPQ]
à direita e, em seguida, retirando a letra.
Além disso, se você quiser remover todos os espaços e substituir por uma vírgula para transformá-lo em um arquivo CSV, sed permitirá que você encadeie expressões. No entanto, ao especificar vários scripts, você precisa colocar -e
na frente deles para informar sed que um script vai seguir. Da ajuda:
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
-e script, --expression=script
add the script to the commands to be executed
Aqui está um exemplo:
sed -E -e 's/([0-9]+)[CSRPQ]//g' -e 's/\s+/,/g' sample.txt
Isso diz executar a primeira substituição e executar a segunda substituição, substituindo os caracteres de espaço repetidos por uma única vírgula. Isso produz a seguinte saída:
USC00020958,-7777,656,721,803,891,975,972,941,906,809,695,605
USC00021001,378,389,448,522,628,736,774,742,674,562,454,376
USC00021026,689,729,792,873,969,1060,1082,1068,1015,903,775,682
USC00021050,663,713,796,885,984,1079,1122,1103,1036,904,754,651
USC00501466,-77,8,168,408,593,723,733,660,529,273,54,-7
USW00501492,-43,18,132,308,510,666,687,605,466,239,45,12
USW00501497,3,-1,0,203,388,539,558,493,362,175,51,27
USW00501684,-118,0,211,413,573,700,710,644,520,294,35,-67
USW00501926,184,223,303,418,544,651,661,617,519,353,227,-7777
Espero que isso ajude!