2013-02-21 8 views
0

패치 할 XML 파일이 수천 가지가 있습니다.sed : regex를 사용하여 많은 XML 파일에서 '<'char를 '<'으로 바꿉니다.

많은 내용이 다음과 같은 문제를 포함하고 있습니다. <someTag attr='text [< 99]'/> (왼쪽 꺾음 괄호 안에 각을 기입하십시오).

* .xml에 대해 [<의 모든 인스턴스를 [&lt;으로 바꾸려면 sed 표현식을 작성하고 싶습니다.

sed -n 19p myFile.xml은 예상대로 <someTag attr='text [<99]'/>을 반환합니다.

echo '[<45' | sed -n '/\[</p'은 예상대로 [<45을 반환합니다.

그러나 sed -n '/\[</p' myFile.xml은 아무 것도 반환하지 않으므로 반향으로 반대로 파일에 대해 해당 식을 사용할 때는 다른 구문이 필요합니다. 어떤 문법을 사용해야합니까?

또한, 한 번 내가이 짓을, 내 계획은 나에게 디버깅을 돕기 위해 모든 파일 및 출력 새 버전을 모든 경기에 대해 그것을 실행하는

sed -i -n 's/correct expression/\[&lt;/g/p' *.xml 그런 짓을하는 것입니다. 그것은 합리적으로 보입니까?

BTW는 sed를 사용하는 도구처럼 보였지만 Linux에서 실행되는 다른 솔루션을 사용하면 문제가 없습니다.

감사합니다. 에코 반대 같은 파일에 대해 그 표현을 사용하는 경우

+0

당신이 준 예제'sed -n '/ \ [

+0

네 말이 맞아. 나는 19 행을 별도의 파일로 sed'd하고 그것을 일치시킬 수 없습니다. 그 시점에서 나는 미쳐 버렸다. 문제가되는 항목을 복사하여 텍스트 편집기에 붙여 넣었을 때, 나는이 진절머리 나는 VT에서 동일하게 보입니다. ( – user2029783

답변

0

그러나, sed -n '/\[</p' myFile.xml 반환 아무것도 그래서 분명히 나는 ​​다른 구문을 필요로하지 .

흠, 나를 위해 작동 :

echo '[<45' > test.xml 
sed -n '/\[</p' test.xml 

반환 [<45.

은 교체 할 경우, 예를 들어,

sed 's/\[</[\&lt;/g' 

처럼 뭔가를 직접 모든 XML 파일을 수정, 수행 말했다

sed -i 's/\[</[\&lt;/g' *.xml 

(-i 옵션은 직접 수정하는 것입니다 파일이 없으면 내용이 표준 출력으로 전송됩니다)

합리적인 것처럼 보입니까?

확실히, 그것이 sed입니다.

+0

예 ... '(' '' '' 아, 그래. :) – user2029783

+0

FYI : 당신은'sed 's/\ [ user2029783

+1

예, 기본 옵션 만 제공 했으므로 -i를 사용하여 파일을 바꿉니다 (질문에 답한 것처럼). – January