특정 지점의 문자 제거

특정 지점의 문자 제거

bash로 작성된 모든 파일을 가져오고 싶기 때문에 이 명령을 사용하면 IFBASH=$(grep -Fx #!/bin/bash *) 작동합니다.

산출:test.sh:#!/bin/bash t test2.sh:#!/bin/bash

이 모든 내용은 $IFBASH 변수에 저장됩니다. 이제 삭제하고 싶어서 :#!/bin/bash 사용했습니다.LIST=$(echo "$IFBASH" | tr -d ':#!/bin/bash')

산출:

   tet.h
   tet2.h

이것은 확실히 내가 원하는 것이 아닙니다. 누군가 나에게 실제로 작동하는 명령을 줄 수 있습니까?

답변1

실패한 이유 tr캐릭터 목록문자열이 아닌 입력으로. 로 변경될 것이기 때문에 인쇄 echo abc | tr 'bca' 'def'할 것입니다 . 로 변경 . 로 변경 .fdebfcdae

grep원하지 않는 부분을 포함하지 않도록 지시하거나(Linux에서 해당 옵션을 지원하는 경우 ) 다음과 같이 문자열을 대체할 수 있는 도구를 사용하여 grep원하는 작업을 수행 할 수 있습니다 .-lsed

  1. GNU 사용grep

     ifbash=$(grep -lx '#!/bin/bash' *)
    
  2. 문자열을 대체할 수 있는 다른 도구를 사용하세요 sed.perl

     ifbash=$(grep -x '#!/bin/bash' * | sed 's|#!/bin/bash||')
    

    또는

     ifbash=$(grep -x '#!/bin/bash' * | perl -pe 's|#!/bin/bash||')
    

여기서는 해당 옵션이 필요하지 않기 때문에 제거하고 로 -F변경했습니다 . 일반적으로 전역 환경 변수는 관례적으로 모두 대문자이므로 쉘 스크립트에서 대문자 변수 이름을 사용하지 않는 것이 가장 좋습니다. 폭이 넓어 예상치 못한 동작이 발생할 수 있습니다.IFBASHifbash

관련 정보