SED가 htaccess에서 수천 개의 301 리디렉션을 수행하고 있습니까?

SED가 htaccess에서 수천 개의 301 리디렉션을 수행하고 있습니까?

내 사이트 중 하나에서 URL을 변경한 후 문제가 발생했습니다. URL은 매우 길었고 나중에 .htacces를 통한 변경에도 불구하고 URL을 변경하기로 결정했습니다...

하나씩 수정하고 있어요. (URL이 1500개가 넘네요...)

나는 이것을 가지고있다:

Redirect 301 /noticies/festes-noticies/diania-roda-les-aixames-la-nit-de-nadal/

이는 다음과 같습니다:

Redirect 301 /noticies/festes-noticies/diania-roda-les-aixames-la-nit-de-nadal/ /diania-roda-les-aixames-la-nit-de-nadal/

/-----/줄 끝에 있는 마지막 에는 공백이 있습니다.

sed나 다른 명령을 사용하여 이 작업을 쉽게 수행할 수 있는 방법이 있습니까?

답변1

사용 sed:

< input_file sed -E 's#((/[^/]*){2})$#\1 \1#' > output_file
  • /[^/]*슬래시가 없는 0개 이상의 문자가 뒤에 오는 슬래시와 일치합니다.
  • (){2}괄호 안에 표현식을 두 번 넣는 것을 의미합니다.
  • $줄의 끝과 일치합니다.
  • 외부는 ()내부 부품을 \1교체 부품으로 재활용할 수 있도록 해줍니다.
  • #편의상 이 대체에서는 슬래시가 아닌 다른 문자(예:)도 구분 기호로 사용됩니다. ERE를 활성화 합니다 -E.

답변2

필수 인가요 sed?

awk -F/ '{printf "%s /%s/\n",$0,$(NF-1)}' old_file > new_file

리디렉션 라인에서만 작동하며 전체 파일을 다시 작성합니다.

awk -F/ '$1 ~ /Redirect/ {printf "%s /%s/\n",$0,$(NF-1); next ; } {print}' old_file > new_file

어디

  • -F//awk에게 필드 구분 기호 로 사용하도록 지시
  • $0, $(NF-1)마지막 필드 앞의 전체 줄입니다.
  • $1 ~ /Redirect/리디렉션이 있는 행 선택
  • next다음 줄로 이동
  • {print}암시적 인쇄 라인 불일치Redirect

편집: 원래 행이 후행으로 끝나는 경우 /마지막 필드 앞에 있는 필드를 선택해야 합니다.


일부는 awk그 자리에서 편집할 수 있습니다( awk -i). 그러나 원본 파일을 유지하고 새 파일에 버전을 적용한 후 결과에 만족하면 이름을 바꾸는 것이 좋습니다.

관련 정보