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.cpps/[[: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:]]*

おすすめ記事