소스 파일과 헤더 파일을 인쇄하는 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:]]*