2013-04-05 3 views
0

파일에서 개행 문자를 건너 뛰는 경우를 제외하고는 정상적으로 작동하는 sed 명령이 있습니다. 여기 내 명령입니다SED가 'possible'newline으로 대체됩니다.

sed -i 's,<a href="\(.*\)">\(.*\)</a>,\2 - \1,g' 

지금, 그것은 완벽하게 작동,하지만 난 너무 같은 a 태그가이 파일을 가로 질러 :

<a href="link">Click 
     here now</a> 

물론 그것은이 하나를 찾을 수 없습니다. 그래서 어떻게 든 검색에서 줄 바꿈을 허용하도록 수정해야합니다. 그러나 내가 먼저 전체 파일을 검토하고 모든 파일을 먼저 제거하지 않으면 그 파일을 허용하는 방법을 알 수 없습니다. \n. 문제 파일에서 모든 서식이 느슨합니다. 출력에 포함 된 줄 바꿈을 떠날 것,있는 그대로

sed -e '/<a href/{;:next;/<\/a>/!{N;b next;};s,<a href="\(.*\)">\(.*\)</a>,\2 - \1,g;}' yourfile 

, 그리고 당신이 그렇게 원한다면 그것은 분명하지 않다 :

답변

2

당신은 나오지도 스크립트에 루프를 삽입하여이 작업을 수행 할 수 있습니다 아닙니다.

sed -e '/<a href/{;:next;/<\/a>/!{N;b next;};s/\n//g;s,<a href="\(.*\)">\(.*\)</a>,\2 - \1,g;}' yourfile 

을 그리고 어쩌면 여분의 공간을 청소 : 아니, 그냥 줄 바꿈을 대체

sed -e '/<a href/{;:next;/<\/a>/!{N;b next;};s/\n//g;s/\s\{2,\}/ /g;s,<a href="\(.*\)">\(.*\)</a>,\2 - \1,g;}' yourfile 

설명을 다음 /<a href/{...}는 우리가 걱정하지 않는다 라인을 무시 할 수 있습니다. 우리가 좋아하는 사람을 찾으면 우리는 그것이 마지막 마커를 가지고 있는지 확인합니다. 그렇지 않다면 (/<\a>/!) 우리는 다음 줄과 줄 바꿈 (N) 및 가지 (b)를 다시 가져온다. 우리가 그것을 발견하면 우리는 대용품을 계속 사용합니다. 여기

+0

다음 오류가 계속 발생합니다 :'sh : 1 : 구문 오류 : 끝나지 않은 따옴표 붙은 문자열' – jfreak53

+0

이것은 쉘에서 발생합니다. 올바른 위치에 작은 따옴표를 넣어야합니다. (복사 및 마지막 예제를 다시 내 껍질에 붙여 넣고 잘 작동합니다.) BTW, sed 버전의 \ s (공백) 이스케이프를 좋아하지 않는 경우 리터럴 공간을 사용할 수 있습니다. 또는 [[: space : ]] 대신에. – William

+0

찾았습니다! 나는 내가 mailcap 파일의 Mutt에서이 명령을 사용하고 있다고 언급 했어야 했으므로 각';':)를 벗어나야했다. 그래도 지금 일하고있어. – jfreak53

0

는 가정 빠르고 더러운 용액 링크에서 더 이상의 개행 없을 것입니다

sed -i '' -e '/<a href=.*>/{/<\/a>/!{N;s|\n||;};}' -e 's,<a href="\(.*\)">\(.*\)</a>,\2 - \1,g' 

첫 번째 명령 </a>없이 <a href=...>의 존재 (/<a href=.*>/{/<\/a>/!{N;s|\n||;};}) 검사, 경우에 다음 행을 패턴 공간으로 읽어 들여 새 행을 제거합니다. 두 번째 것은 당신 것입니다.

관련 문제