2016-09-27 6 views
1

다음 코드를 사용하여 string1 또는 string2와 일치하는 줄을 바꿉니다. 그것은 HTML 텍스트에서 정상적으로 잘 작동합니다. (나는 regex와 html을 사용하는 것이 눈살을 찌푸 웁니다.) 그러나 한 특정 파일에서는 작동하지 않습니다.SED 일치하는 텍스트 파일의 여러 문자열이 매달 렸거나 완료되지 않았습니다.

코드의 올바른 끝과 코드 검사를 올바르게 시도했습니다. html 줄이 많이있는 것 외에는 실제 파일을 공유 할 수 없습니다.

cat file.txt | sed 's/.*\(string1\|string2\).*/match/' 

제공된 세부 사항을 사용하고 파일없이이 명령을 수행 한 이유는 무엇입니까? 귀하의 통찰력이 크게 감사드립니다.

업데이트 : 여기

는 몇 가지 다른 아이디어 :

  • 선도 할 수 공백이나 빈 줄은 원인?
  • 큰 괄호 또는 특수 문자가 원인 일 수 있습니까?
  • SED가 멈추는 원인이 있습니다. 비슷한 경험이 있습니까?
  • SED가 멈추는 원인이되는 극단적 인 긴 줄 일 수 있습니까?

업데이트 2 : 나는 하나의 거대한 긴 줄이 있음을 알아 냈

- 494,000 문자. 이 줄은 주로 CSS 코드와 세부 정보입니다.

이제 질문은 ... 긴 줄일까요, 아니면 그 줄 내의 문자입니까?

+0

노드를 사용할 수 있습니까? 그렇다면'document.querySelector'를 사용할 수 있습니다. – Enijar

+0

내 말은, 내가 할 수 있겠지만, 나는 정말로 직선적 인, awk 또는 다른 bash 명령을 사용하는 것을 선호 할 것이다. – DomainsFeatured

+0

충분히 그렇다면 HTML 파일의 예제 부분을 제공해 줄 수 있습니까? – Enijar

답변

1

나는이 대답을 제공하는 것이 다소 당황 스럽지만 실제로 문제를 해결하고 너희들과 일하는 데 시간을 할애했다. 다행히도 SED 교수형에 문제가있는 사람은 누구나 도움이 될 것입니다.

파일의 한 줄에 400K 이상의 문자가 포함되어있어 SED가 너무 오래 걸릴 수 있습니다. 이것이 문제였습니다. 라인이 짧아지면 처리 시간도 단축되었습니다. SED 명령으로 아무것도 일치하는 경우

cat file.txt | awk 'length($0)<1000' | sed 's/.*\(string1\|string2\).*/match/' 

이 문제를 해결하고 그냥 매달려있어이 실행 한 후, 먼저 선을 단축하기 위해 다음 명령을 사용하여 고정 할 수 있습니다.

(이를 반영하여 질문 제목이 업데이트됩니다.)

+0

입력을 작은 줄로'cat file.txt | fold -w 1000 | ... '? 긴 줄의 부분에서 sed가 빠르게 작동합니까? string1/string2는 어떻게 채워 집니까? a/inside를 가질 수있는 변수가 있습니까? –

+0

Hi Walter, 네, sed는 긴 줄의 부분에서 빠르게 작동합니다. 줄에서 String1/2를 바꿔야하지만,이 경우 1K 문자를 넘는 줄은 부적합합니다. 그리고, 아니, 그들은 변수가 아닙니다. 질문 주셔서 감사합니다 :-) – DomainsFeatured

관련 문제