2010-06-08 2 views
1

html 파일을 포함하는 하위 디렉토리를 중첩했습니다. 이러한 HTML 파일 각각에 대해 나는이 OSX의 터미널에서 내 시도 <div id="left- 패턴까지 파일의 상단에서 삭제할 :재귀 다중 행 sed - 패턴 일치까지 파일의 시작을 제거합니다.

find . -name "*.html" -exec sed "s/.*?<div id=\"left-col/<div id=\"left-col/g" '{}' \; 

내가 termainal에서 HTML 출력을 많이 얻을 수는 있지만 파일이 없습니다 대체를 포함하거나 작성되었습니다.

답변

4

명령에 두 가지 문제점이 있습니다. 첫 번째 문제는 sed의 출력 위치를 선택하지 않는다는 것입니다. 두 번째는 sed 스크립트가 원하는 작업을 수행하지 못한다는 것입니다. 게시 한 스크립트는 각 행을보고 <div> 앞에있는 모든 행을 삭제합니다. <div>이없는 줄은 영향을받지 않습니다. 당신은 시도 할 수 있습니다 :

find . -name "*.html" -exec sed -i.BAK -n "/<div id=\"left-col/,$ p" {} \; 

이 자동으로 원래 버전 .BAK를 추가하여 파일을 백업합니다. 이 경우 바람직하지 않은 경우 -i.BAK-i으로 변경하십시오.

+0

감사합니다, 대성공, 관심 있어요, 거기에 이것을 바꾸기위한 간단한 방법은 전에 없던가? –

+0

예,'sed' 문자열을''1,/yourpattern/p "'로 변경하십시오. ''/ startpattern /,/stoppattern/p "'와 동시에 둘 다 할 수 있습니다. – VeeArr

+0

고맙습니다 - 상단 서랍 –

0

sed의 출력을 어디에도 저장하지 않습니다. 그것이 html을 뱉어내는 이유입니다.

1

sed 정규식의 결과를 stdout 콘솔에 출력하고 있습니다. 콘솔에 파일을 쓰려는 경우입니다.

find . -name "*.html" -exec sed -i "s/.*?<div id=\"left-col/<div id=\"left-col/g" '{}' \; 

가능하면,이 명령을 수행하기 전에 반드시 백업 파일합니다 발견을 수행하고 SED로 교체하려면

-i 플래그를 사용합니다. 그렇지 않으면 잘못 입력 된 정규 표현식에서 데이터 손실의 위험이 있습니다.

+0

흠, 나는 긴 파일 목록과'sed : 1 : "./foo/bar ...": 잘못된 명령 코드. "를 가지고 있습니다. –