모든 파일에서 코드 줄 검색 및 삭제

모든 파일에서 코드 줄 검색 및 삭제

디렉터리의 모든 파일에서 3줄의 코드를 검색하고 제거하는 데 도움이 필요합니다.

코드는 다음과 같습니다

if ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) { 
    include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ); 
}

교체보다는 제거만 하면 됩니다.

어떤 아이디어가 있나요?

광고 건배

답변1

perl -0777 -i~ -pe "s{^\\Qif ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) { \E\n\Q    include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ); \E\n}\n}{}m" -- dir/*
  • 0777"후루룩 모드"를 활성화합니다. 즉, 한 줄씩 읽는 대신 전체 파일을 로드합니다.
  • -i파일을 "제자리"로 변경하여 이름에 추가된 백업을 생성합니다 ~.~
  • -p처리 후 입력 내용을 인쇄합니다.
  • 이 코드는 단지 대체 코드이지만 s{}{}전체 파일을 로드할 때 세 줄을 실행합니다.
  • Final m수정자는 : 의 동작을 변경하여 ^문자열의 시작 부분을 일치시키는 대신 이제 각 줄의 시작 부분과 일치시킵니다.
  • 따옴표 사이에 모든 내용을 포함 \Q...\E하므로 특수 문자에 백슬래시를 추가할 필요가 없습니다.

find이를 하위 디렉터리의 재귀 실행과 결합 할 수 있습니다 . 그러나 교체 구분 기호를 {}다음과 같이 변경해야 합니다 find -exec.

find /dir -type f -exec perl -i~ -0777 -pe "s<^\\Qif ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) { \E\n\Q    include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ); \E\n}\n><>m" -- {} +

답변2

find /dir -type f -print0 \
    | xargs -0r grep -Fn "$(cat << 'EOT'
if ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) { 
    include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ); 
}
EOT
    )" \
    | tac \
    | while IFS=: read -r file_name line_number _; do
        sed -i "${line_number}d" "$file_name" # You can dry run by commenting out this line.
        echo "Removed ${line_number}th line from $file_name"
    done

sed행 번호를 사용하여 행을 삭제합니다 grep.

  • grep -n: 일치하는 줄 번호를 표시합니다.
  • grep -F: 고정 문자열과 일치합니다. 성능을 위해 작동합니다.
  • tac백 라인에서 제거 용 . 줄 번호 변경을 방지합니다.
  • sed -i "${line_number}d" "$file_name": $line_number다음에서 제거 $file_name...

답변3

같은 바이러스가 있는데 메모장++를 통해 텍스트를 삭제했습니다.

if ( file_exists( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' ) ) {\r\n\x20\x20\x20\x20include_once( plugin_dir_path( __FILE__ ) . '/.' . basename( plugin_dir_path( __FILE__ ) ) . '.php' );\r\n}

공백으로 바꿉니다.

답변4

다음 명령을 사용하여 PATTERN이 포함된 줄과 다음 n줄(귀하의 경우 2줄)을 삭제할 수 있습니다.

sed  '/PATTERN/,+2d'

첫 번째 줄의 PATTERN 부분이 작업을 수행해야 합니다.

관련 정보