내 파일에 다음이 있는데 "monitoring" 텍스트와 monitoring/
접미사( )의 백슬래시를 제거해야 합니다.
<base href="/monitoring/" />
그러면 출력은 다음과 같습니다
<base href="/" />
sed나 다른 방법을 통해 이를 달성할 수 있습니다.
답변1
문서가 올바른 형식의 XML 문서라고 가정합니다.
<?xml version="1.0"?>
<root>
<base href="/monitoring/"/>
</root>
xmlstarlet
다음 명령은 해당 문자열 monitoring/
(및 그 뒤에 오는 모든 항목)을 포함하는 노드 속성에서 제거합니다.base
href
xmlstarlet ed \
-u '//base/@href[contains(.,"monitoring/")]' \
-x 'substring-before(.,"monitoring/")' file.xml
그러면 새 이름으로 리디렉션하고 원본 파일을 해당 이름으로 바꿔야 하는 XML 문서가 출력됩니다.
답변2
전용 파서(예: 구조화된 텍스트)를 사용하는 것이 강력히 권장되지만 xmlstarlet
파일에 해당 태그가 하나만 있는 한 다음이 작동합니다.sed
base
sed -E '/\<base/s,(href="/)[^"]+,\1,' input.html
<base
이는 패턴이 포함된 줄 에 작용 하고 패턴을 대체하여 뒤에 오는 텍스트를 제거합니다.href="/any text up to the double quote
href="/
/
기본적으로 파일은 편집되지 않습니다. 파일을 편집하려면 출력을 파일로 리디렉션하거나 내부 편집 옵션을 사용하십시오 i
.
sed -i -E '/\<base/s,(href="/)[^"]+,\1,' input.html