2016-06-19 6 views
2

그래서 내가 (예상 결과와 다음정규식 패턴

<duration>89</duration> 

을 대체하고 싶었 교체하거나 적어도 그렇게 기본적으로이 :)

\n<duration>89</duration> 

될 함께 모든 < 교체 샤 우드 \ n <에서 정규식 그래서 생각.

sed -e 's/<[^/]/\n</g' 

만 문제는 분명히 내 질문에 저를 제공

\n<uration>89</duration> 

를 출력합니다. < (/가 아님)을 따르는 캐릭터에 대해 regex를 mach로 말할 수는 있지만 예상 된 결과를 얻을 수 있도록 대체하지 마십시오.

답변

1

이 시도 :

sed -e 's/<[^/]/\\n&/g' file 

또는

sed -e 's/<[^/]/\n&/g' file 

&는 다음 PATT의 일부를 참조

+0

니스. '-E' 옵션은 좀 더 휴대하기 쉬운 IMHO입니다. – sjsam

0
echo "<duration>89</duration>" | sed -E 's/<([^\/])/\\n<\1/g' 

해야합니다.

샘플 실행

$ echo "<duration>89</duration> 
> <tag>Some Stuff</tag>"| sed -E 's/<([^\/])/\\n<\1/g' 
\n<duration>89</duration> 
\n<tag>Some Stuff</tag> 
1

일치 ERN 공간이 멋지게 awk으로 수행 할 수 있습니다

echo '<duration>89</duration>' | awk '1' RS='<' ORS='\n<' 
  • RS='<' sets the input record separator to <`
  • ORS='\n<' sets the output record separator to \ n < '
  • 1 항상 true로 평가합니다. 후속 조치가 지정되지 않은 참 조건은 awk에 레코드 인쇄를 지시합니다.
0
echo '<duration>89</duration>' | awk '{sub(/<dur/,"\\n<dur")}1' 
\n<duration>89</duration> 
0

귀하의 성명 종류의 올바른 작은 문제에있다. sed은 입력 한 모든 조건을 포함하여 전체 패턴을 대체합니다. 따라서 [^/] 조건문도 대체됩니다.

sed -e 's/<\([^/]\)/\n<\1/g' file 

또는 사이러스

sed -e 's/<[^/]/\n&/g' file 

환호에 의해 지적 : 당신이 필요로하는 것은이 부분을 보존하는 것입니다, 따라서 다음 두 문장 중 하나를 시도 할 수 있습니다!