sed 또는 정규식 패턴을 사용하여 파일에서 백슬래시 뒤에 오는 텍스트를 제거하는 방법

sed 또는 정규식 패턴을 사용하여 파일에서 백슬래시 뒤에 오는 텍스트를 제거하는 방법

내 파일에 다음이 있는데 "monitoring" 텍스트와 monitoring/접미사( )의 백슬래시를 제거해야 합니다.

 <base  href="/monitoring/" />

그러면 출력은 다음과 같습니다

<base  href="/" />

sed나 다른 방법을 통해 이를 달성할 수 있습니다.

답변1

문서가 올바른 형식의 XML 문서라고 가정합니다.

<?xml version="1.0"?>
<root>
  <base href="/monitoring/"/>
</root>

xmlstarlet다음 명령은 해당 문자열 monitoring/(및 그 뒤에 오는 모든 항목)을 포함하는 노드 속성에서 제거합니다.basehref

xmlstarlet ed \
    -u '//base/@href[contains(.,"monitoring/")]' \
    -x 'substring-before(.,"monitoring/")' file.xml

그러면 새 이름으로 리디렉션하고 원본 파일을 해당 이름으로 바꿔야 하는 XML 문서가 출력됩니다.

답변2

전용 파서(예: 구조화된 텍스트)를 사용하는 것이 강력히 권장되지만 xmlstarlet파일에 해당 태그가 하나만 있는 한 다음이 작동합니다.sedbase

sed -E '/\<base/s,(href="/)[^"]+,\1,' input.html 

<base이는 패턴이 포함된 줄 에 작용 하고 패턴을 대체하여 뒤에 오는 텍스트를 제거합니다.href="/any text up to the double quotehref="//

기본적으로 파일은 편집되지 않습니다. 파일을 편집하려면 출력을 파일로 리디렉션하거나 내부 편집 옵션을 사용하십시오 i.

sed -i -E '/\<base/s,(href="/)[^"]+,\1,' input.html 

관련 정보