sed를 사용하여 문자열 범위에서 개행 문자 바꾸기

sed를 사용하여 문자열 범위에서 개행 문자 바꾸기

아래와 같은 문자가 왔습니다.

<div><p class="title">software
v1.0.1.0
download</p></div>
<div><p class="title">software
v1.0.2.0
download</p></div>
<div><p class="title">software
v1.0.3.0
download</p></div>

range 에서 개행 문자를 교체해야 합니다 <p class="title">...</p>. 아래와 같이 만드세요.

<div><p class="title">software v1.0.1.0 download</p></div>
<div><p class="title">software v1.0.2.0 download</p></div>
<div><p class="title">software v1.0.3.0 download</p></div>

sed를 사용하여 이 작업을 수행할 수 있나요? 도움을 주셔서 미리 감사드립니다!

답변1

파일에 이러한 3개의 "중복" 줄만 포함되어 있는 경우 다음을 사용할 수 있습니다.

$ sed 'N;N;s/\n/ /g' file

그러면 다음이 생성됩니다.

<div><p class="title">software v1.0.1.0 download</p></div>
<div><p class="title">software v1.0.2.0 download</p></div>
<div><p class="title">software v1.0.3.0 download</p></div>

sed파일에 추가 줄이 포함되어 있으면 다음 스크립트를 사용하세요.

$ sed '/class="title"/ { N;N;s/\n/ /g }' file

답변2

GNU다음을 사용할 수 있기 때문에sed

sed -n '/class="title"/{N;s/\n/ /;N;s/\n/ /p;}' file.txt

N패턴 공간에 다음 줄 추가

답변3

여기서는 필요하지도 않습니다 sed. 당신은 이것을 할 수 있습니다 paste:

paste -d ' ' - - - < file

또는:

paste -sd '  \n' file

개행 문자를 그 뒤의 <p class="title">다음 공백 문자 로 바꾸려면 다음을 수행하십시오 </p>.

perl -0777 -pe 's{<p class="title">.*?</p>}{$& =~ y/\n/ /r}gse' < file

답변4

<div>귀하의 질문은 a가 닫힌 경우에만 줄을 접고 개행을 인쇄하는 방법으로 설명될 수 있습니다. 물론 이것은 HTML이 아닌 간단한 HTML 비트에서 작동합니다. 여기에서 awk를 사용하면:

awk '{ORS = (/\/div>$/? "\n": " ")} 1' file

/div>줄 끝에 일치하는 항목이 있으면 ORS(출력 레코드 구분 기호)를 개행 문자로 설정하고, 그렇지 않으면 ORS를 공백으로 설정합니다. 모든 라인을 1의미합니다 {print}.

<div><p class="title">software v1.0.1.0 download</p></div>
<div><p class="title">software v1.0.2.0 download</p></div>
<div><p class="title">software v1.0.3.0 download</p></div>

관련 정보