sed 不匹配流中单词边界上的模式

sed 不匹配流中单词边界上的模式

我有一个打印源文件和头文件的 makefile 配方。我正在尝试修复输出以在 Autotools 配方中使用。输出make sources如下所示。

我需要删除以以下结尾的单词simd.cpp。 SIMD 文件需要特殊的架构标志,因此它们不会被放入列表中。我发现了一个类似的关于堆栈溢出的问题但它并没有删除其中带有 simd 的文件名。

以下是我尝试匹配单词并将其从流中删除的尝试。他们都没有删除所有的单词。事实上,我不相信任何 simd 单词被删除。

  • 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'

据我从堆栈溢出问题中了解到的情况,\b匹配单词,前导*捕获单词的第一部分,并-simd.cpp[^ ]*匹配单词的最后部分,包括尾随空格。

我有什么误解以及如何解决?


这是需要删除单词的输出*-simd.cpp

$ 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

...

答案1

[],里面*是一个文字字符,外面是一个量词。

我真的没有看到在\b这里使用单词边界锚点()有任何价值 - 你可能想要匹配诸如非空字母数字字符序列后跟后缀之类的东西,-simd.cpp例如s/[[:alnum:]]*-simd.cpp//g

我们可以使用以下方法检查匹配的内容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

如果字母数字字符串不够通用,您可以匹配一系列非空白字符[^[:blank:]]*

相关内容