당신의 도움이 필요합니다. Linux 시스템에 HTML 파일이 있고 이 테이블의 행에 "아니요"가 없으면 행을 삭제하고 싶습니다.
HTML 파일은 다음과 같습니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Checking files</title>
</head>
<body>
<h1>Table 1</h1>
<p>
Checking data of yes or no
</p>
<table border="1" width="100%">
<tr>
<th colspan="7" style="text-align:center"><h2 class="heading">Data 1</h2></th>
</tr>
<tr>
<th> </th>
<th style="width:33%">Names</th>
<td>Serial</th>
<th>Severe?</th>
<th>Days</th>
<th>Remark Date</th>
</tr>
<tr class="checks-one">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Net_one</td>
<td>int</td>
<td>yes</td>
<td>50</td>
<td>action</td>
</tr>
<tr class="check-two">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Name_two</td>
<td>hex</td>
<td>no</td>
<td>55</td>
<td>no action</td>
</tr>
<tr class="check-three">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Name_three</td>
<td>hex</td>
<td>yes</td>
<td>58</td>
<td>action</td>
</tr>
</table>
<table border="1" width="100%">
<tr>
<th colspan="7" style="text-align:center"><h2 class="cert-kind">Data 2</h2></th>
</tr>
<tr>
<th> </th>
<th style="width:33%">Names</th>
<td>Serial</th>
<th>Severe?</th>
<th>Days</th>
<th>Remark Date</th>
</tr>
<tr class="checks-one">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Net_one</td>
<td>int</td>
<td>yes</td>
<td>50</td>
<td>action</td>
</tr>
<tr class="check-two">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Name_two</td>
<td>hex</td>
<td>no</td>
<td>55</td>
<td>no action</td>
</tr>
<tr class="check-three">
<td style="text-align:center"><i class="alert"></i></td>
<td style="width:33%">Name_three</td>
<td>hex</td>
<td>yes</td>
<td>58</td>
<td>action</td>
</tr>
</table>
</body>
</html>
이 html 파일의 출력은 다음과 같습니다.
Table 1
Checking data of yes or no
Data 1
Names Serial Severe? Days Remark Date
Net_one int yes 50 action
Name_two hex no 55 no action
Name_three hex yes 58 action
Data 2
Names Serial Severe? Days Remark Date
Net_one int yes 50 action
Name_two hex no 55 no action
Name_three hex yes 58 action
내 예상 결과는 다음과 같습니다
Table 1
Checking data of yes or no
Data 1
Names Serial Severe? Days Remark Date
Net_one int yes 50 action
Name_three hex yes 58 action
Data 2
Names Serial Severe? Days Remark Date
Net_one int yes 50 action
Name_three hex yes 58 action
저는 쉘 스크립팅을 처음 접했고 awk, sed 등과 같은 다양한 방법을 시도했지만 그 중 아무 것도 작동하지 않았습니다. 어떤 도움이라도 대단히 감사하겠습니다.
답변1
awk -v RS="</tr>" '
!/<td>no<\/td>/{ a=(NR==1 ? "" : a RS) $0 }
END{ print a }
' file.html
귀하의 구체적인 예에 따르면 이 GNU awk가 트릭을 수행하는 것 같습니다.
- 줄 구분 기호를 다음으로 설정하세요.
</tr>
- "no" 필드를 포함하지 않는 모든 "행"을 변수에 추가합니다(첫 번째 "행"에 필드 구분 기호를 추가하지 마세요).
- 다시 생성된 HTML 파일을 인쇄합니다.
한번 시도해보고 그것이 당신에게 효과가 있는지 확인하십시오.
편집: 가장 먼저 떠오르는 것은 변수를 사용하는 것이지만 이는 쉽게 제거할 수 있으며 결과는 다음과 같습니다.
awk -v RS="</tr>" -v ORS="" '!/<td>no<\/td>/{ print (NR==1 ? "" : RS) $0 }' file.html