<
내 데이터 앞에 새 줄을 어떻게 추가할 수 있나요 ?
내 현재 날짜는 다음과 같습니다.
<VALUE MAGID="1" MAGNAME="Fireball" TYPE="0" <VALUE MAGID="2" MAGNAME="Heal" TYPE="4" <VALUE MAGID="3" MAGNAME="WeaponAccuracy" TYPE="7" <VALUE MAGID="4" MAGNAME="WeaponGuidance" TYPE="7" <VALUE MAGID="5" MAGNAME="GreaterFireball" TYPE="0"
출력은 다음과 같아야합니다
<VALUE MAGID="1" MAGNAME="Fireball" TYPE="0"
<VALUE MAGID="2" MAGNAME="Heal" TYPE="4"
<VALUE MAGID="3" MAGNAME="WeaponAccuracy" TYPE="7"
<VALUE MAGID="4" MAGNAME="WeaponGuidance" TYPE="7"
<VALUE MAGID="5" MAGNAME="GreaterFireball" TYPE="0"
답변1
텍스트 패턴을 바꾸려면 sed
다음과 같이 's' 명령을 사용할 수 있습니다.
sed 's/foo/bar/g'
foo
이는 의 모든 발생을 로 대체합니다 bar
.
특히 각 앞에 개행 문자를 추가하려면 <
다음을 수행하십시오.
echo '<value ... <value ...' | sed 's/</\n</g'
맨 처음에 개행 문자를 추가하는 것을 원하지 않으면 대신 다음을 수행할 수 있습니다.
echo '<value ... <value ...' | sed 's/\(.\)</\1\n</g'
답변2
sed 's/</\n&/g'
s
인수는 sed에게에스트링[텍스트]- sed는 이 형식을 사용합니다
/selectText/ReplaceText/
--> 예를 들어,/<//
이것은 기호를 제거하고<
첫 번째만 제거합니다.<
- 모두 선택하려면 의 끝에
<
인수를 사용합니다 . 즉, 찾은 모든 항목을 교체합니다. 예: 모두 교체g
/select/replace/g
<
\n
추가할 인수개행\
백슬래시 로 작성해야 합니다.&
인수는 sed에게 모든 것을 복사하여 붙여넣으라고 지시합니다.~ 후에이 경우에는 무엇을 선택했는지<
값...
답변3
GNU가 있는 경우 다른 답변에서 제안하는 대로 수행할 수 있습니다 sed
.
sed 's/</\n</g' file
그러나 예를 들어 macOS 또는 다른 BSD 시스템에 GNU가 없는 경우 대체 텍스트의 이스케이프 시퀀스 sed
대신 리터럴 개행 문자를 사용해야 할 수도 있습니다 .\n
sed 's/</\
</g' file
이것은 약간 보기 흉해 보이지만 표준은 대체 텍스트에서 "리터럴 문자" 이외의 다른 것으로 sed
인식하지 않습니다 .\n
n
y///
모두를 줄 바꿈으로 바꾸는 명령을 사용하여 보기 흉한 구문을 해결할 수 있습니다 <
(여기서는\n
~이다"개행"으로 인식됨) 다음 <
문자를 다시 삽입하세요.
sed -e 'y/</\n/' -e 's/\n/&</g' file
비어 있는 첫 번째 결과 행을 필터링하려면 다음을 파이프하십시오 tail -n +2
.
$ sed -e 'y/</\n/' -e 's/\n/&</g' file | tail -n +2
<VALUE MAGID="1" MAGNAME="Fireball" TYPE="0"
<VALUE MAGID="2" MAGNAME="Heal" TYPE="4"
<VALUE MAGID="3" MAGNAME="WeaponAccuracy" TYPE="7"
<VALUE MAGID="4" MAGNAME="WeaponGuidance" TYPE="7"
<VALUE MAGID="5" MAGNAME="GreaterFireball" TYPE="0"
xmlstarlet
...하지만 이상적으로는 원본 XML 파일 과 같은 XML 파서를 사용하는 것이 좋습니다 xq
. 라인 기반 도구를 사용하여 구문 분석을 위해 형식을 다시 지정하기 전의 모습입니다.