cantado não corresponde a padrões em um limite de palavra em um fluxo

2

Eu tenho uma receita makefile que imprime arquivos de origem e arquivos de cabeçalho. Estou tentando consertar a saída para usar em uma receita do Autotools. Uma saída de make sources é mostrada abaixo.

Eu preciso remover as palavras que terminam em simd.cpp . Os arquivos SIMD precisam de sinalizadores arquitetônicos especiais para não serem colocados na lista. Eu encontrei uma pergunta semelhante no estouro de pilha mas ela não está removendo os nomes dos arquivos com simd neles.

Estas são minhas tentativas de corresponder palavras e removê-las do fluxo. Nenhum deles removeu todas as palavras. Na verdade, não acredito que nenhuma das palavras simd tenha sido removida.

  • sed -e 's|\b[*]\-simd.cpp[^ ]*||g'
  • sed -e 's|\b[*]-simd.cpp[^ ]*||g'
  • sed -e 's|\b*-simd.cpp[^ ]*||g'
  • sed -e 's|\b*\-simd.cpp[^ ]*||g'
  • sed -e 's|\b*\-simd.cpp||g'
  • sed -e 's|\b*-simd.cpp||g'
  • sed -e 's|\b-simd.cpp||g'

Como eu entendi as coisas da pergunta de estouro de pilha, \b corresponde a palavras, levando * captura a primeira parte da palavra e -simd.cpp[^ ]* corresponde à última parte da palavra, incluindo o espaço à direita.

O que estou entendendo errado e como corrigi-lo?

Aqui está a saída que precisa das palavras *-simd.cpp removidas.

$ make sources | fold -w80 -s
***** Library sources *****
cryptlib.cpp cpu.cpp integer.cpp 3way.cpp adler32.cpp algebra.cpp algparam.cpp
arc4.cpp aria-simd.cpp aria.cpp ariatab.cpp asn.cpp authenc.cpp base32.cpp
base64.cpp basecode.cpp bfinit.cpp blake2-simd.cpp blake2.cpp blowfish.cpp
blumshub.cpp camellia.cpp cast.cpp casts.cpp cbcmac.cpp ccm.cpp chacha.cpp
cham-simd.cpp cham.cpp channels.cpp cmac.cpp crc-simd.cpp crc.cpp default.cpp
des.cpp dessp.cpp dh.cpp dh2.cpp dll.cpp dsa.cpp eax.cpp ec2n.cpp eccrypto.cpp
ecp.cpp elgamal.cpp emsa2.cpp eprecomp.cpp esign.cpp files.cpp filters.cpp
fips140.cpp fipstest.cpp gcm-simd.cpp gcm.cpp gf256.cpp gf2_32.cpp gf2n.cpp
gfpcrypt.cpp gost.cpp gzip.cpp hc128.cpp hc256.cpp hex.cpp hight.cpp hmac.cpp
hrtimer.cpp ida.cpp idea.cpp iterhash.cpp kalyna.cpp kalynatab.cpp keccak.cpp
lea-simd.cpp lea.cpp luc.cpp mars.cpp marss.cpp md2.cpp md4.cpp md5.cpp
misc.cpp modes.cpp mqueue.cpp mqv.cpp nbtheory.cpp neon-simd.cpp network.cpp
oaep.cpp osrng.cpp padlkrng.cpp panama.cpp pkcspad.cpp poly1305.cpp
polynomi.cpp ppc-simd.cpp pssr.cpp pubkey.cpp queue.cpp rabbit.cpp rabin.cpp
randpool.cpp rc2.cpp rc5.cpp rc6.cpp rdrand.cpp rdtables.cpp rijndael-simd.cpp
rijndael.cpp ripemd.cpp rng.cpp rsa.cpp rw.cpp safer.cpp salsa.cpp scrypt.cpp
seal.cpp seed.cpp serpent.cpp sha-simd.cpp sha.cpp sha3.cpp shacal2-simd.cpp
shacal2.cpp shark.cpp sharkbox.cpp simeck-simd.cpp simeck.cpp simon-simd.cpp
simon.cpp skipjack.cpp sm3.cpp sm4-simd.cpp sm4.cpp socketft.cpp sosemanuk.cpp
speck-simd.cpp speck.cpp square.cpp squaretb.cpp sse-simd.cpp strciphr.cpp
tea.cpp tftables.cpp threefish.cpp tiger.cpp tigertab.cpp trdlocal.cpp
ttmac.cpp tweetnacl.cpp twofish.cpp vmac.cpp wait.cpp wake.cpp whrlpool.cpp
xtr.cpp xtrcrypt.cpp zdeflate.cpp zinflate.cpp zlib.cpp

...
    
por jww 26.07.2018 / 03:44

1 resposta

3

Dentro de [] , * é um caractere literal e, fora, é um quantificador.

Eu não vejo realmente nenhum valor em usar âncoras de limite de palavra ( \b ) aqui - você provavelmente deseja corresponder algo como uma sequência não vazia de caracteres alfanuméricos seguido do sufixo -simd.cpp , por exemplo s/[[:alnum:]]*-simd.cpp//g

Podemos verificar o que combina usando grep :

$ grep -o '[[:alnum:]]*-simd.cpp' sources 
aria-simd.cpp
blake2-simd.cpp
cham-simd.cpp
crc-simd.cpp
gcm-simd.cpp
lea-simd.cpp
neon-simd.cpp
ppc-simd.cpp
rijndael-simd.cpp
sha-simd.cpp
shacal2-simd.cpp
simeck-simd.cpp
simon-simd.cpp
sm4-simd.cpp
speck-simd.cpp
sse-simd.cpp

Se uma cadeia alfanumérica não for genérica o suficiente, você pode corresponder uma seqüência de caracteres que não sejam espaços em branco [^[:blank:]]*

    
por 26.07.2018 / 04:01