sed를 사용하여 문자열 사이의 텍스트 제거

sed를 사용하여 문자열 사이의 텍스트 제거

그래서 몇 가지 비슷한 문제를 해결했지만 그 중 어떤 것도 해결할 수 없습니다.

현재 이것을 사용하려고 합니다:

sed -i '/^<script/,/script>/{/^<script/!{/script>/!d}}' file.txt

나는 이렇게 하면 <script과 사이의 모든 내용이 삭제될 것이라고 생각했지만, script>짐작하셨겠지만 그렇지 않습니다.

txt 파일의 코드는 다음과 같습니다.

<script type="text/javascript">
 bla bla some script bla bla
</script>

여러 위치에 여러 스크립트가 있습니다.. txt그것들을 모두 삭제해야합니다.

답변1

여는 태그와 닫는 태그(여는 태그는 항상 줄의 시작 부분에 있음) script사이의 텍스트를 제거하려면 다음을 수행하면 됩니다.

sed -i '/^<script/,/<\/script>/d' file

물론, sed이런 일을 위해서나쁜 생각이야적절한 파서를 사용해야 합니다. 예를 들어, 입력 파일에 중첩된 블록이 포함되어 있으면 어떻게 될까요?

<script type="text/javascript">
 bla bla some script bla bla
<script>
    foo
</script>
</script>

그러나 이것이 문제인지 아닌지는 입력 데이터에 따라 다릅니다.

관련 정보