텍스트 필드 뒤에 줄 추가

텍스트 필드 뒤에 줄 추가

<내 데이터 앞에 새 줄을 어떻게 추가할 수 있나요 ?

내 현재 날짜는 다음과 같습니다.

<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인식하지 않습니다 .\nn

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. 라인 기반 도구를 사용하여 구문 분석을 위해 형식을 다시 지정하기 전의 모습입니다.

관련 정보