아래와 같은 문자가 왔습니다.
<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>