html 소스 코드를 구문 분석하려고합니다. 내 예에서는 그냥 반향하고 있습니다. 그러나 실제로 파일에서 html을 읽고 있습니다.
다음은 구문 적으로 작동하는 약간의 코드입니다.
echo "<td>Here</td> some dynamic text to ignore <garbage> is a string</table>more junk" |
awk -v FS="(<td>|</td>|<garbage>|</table>)" '{print $2, $4}'
FS 선언에서 잘 작동하는 4 개의 구분 기호를 만들고 두 번째 및 네 번째 필드를 출력합니다.
그러나 실제로 사용해야하는 세 번째 필드 구분 기호에는 문자 그대로 awk 명령 문자가 포함되어 있습니다.
')">
위의 문장을 다음과 같이 변경하면
echo "<td>Here</td> some dynamic text to ignore ')\"> is a string</table>more junk" |
awk -v FS="(<td>|</td>|')\">|</table>)" '{print $2, $4}'
나는 하나, 모두, 그리고 \ 문자와 문제가되는 문자열의 모든 조합을 이스케이프하려고했습니다. 그러나 아무것도 작동하지 않습니다.
이것은 당신이 찾고있는 것일 수 있습니다.
$ echo "<td>Here</td> some dynamic text to ignore ')\"> is a string</table>more junk" |
awk -v FS='(<td>|</td>|\047\\)">|</table>)' '{print $2, $4}'
Here is a string
쉘에서 문자열 내용을 쉘에 노출시키기 위해 큰 따옴표를 사용할 필요가 없다면, 예를 들어 쉘이 변수를 확장하도록 허용하지 않는 한 항상 작은 따옴표 안에 문자열 (및 명령 줄 스크립트)을 포함하십시오.
쉘 규칙에 따라 작은 따옴표로 구분 된 문자열 내에 작은 따옴표를 포함 할 수 없으므로'foo'bar'
(백 슬래시가 해당 중간 문자열을 이스케이프하도록 작동하지 않음 '
) 작은 따옴표에서 뒤로 이동하여 작은 따옴표를 제공 한 다음 오십시오. 예를 들어 작은 따옴표를 원할 때마다 'foo'\''bar'
8 진수 이스케이프 시퀀스를 사용하거나 사용합니다 \047
(오류가 발생하기 쉬우므로 16 진수를 사용하지 마십시오) 'foo\047bar'
. 그런 다음 )
두 번 이스케이프해야합니다. awk가 문자열을 정규 표현식으로 변환 할 때 한 번, 그리고 awk가이를 정규 표현식으로 사용할 때 다시 한 번합니다.
문자열 주위에 큰 따옴표를 사용했다면 셸이 문자열을 구문 분석 할 때 추가 이스케이프가 필요했지만 셸이 문자열을 구문 분석하는 것을 차단하므로 문자열을 작은 따옴표로 묶을 때는 필요하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다