텍스트 필드 뒤에 줄 추가

텍스트 필드 뒤에 줄 추가

<데이터 앞에 새 행을 추가하는 방법은 무엇입니까 ?

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

<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/--> 예를 들어 /<//이것은 기호를 제거하고 <첫 번째 기호만 제거합니다.<
  • 모두 선택하려면 end 에 인수를 <사용하세요 . 이는 찾은 모든 항목을 바꾸는 것을 의미합니다. 예를 들어 모두 바꾸기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"

...하지만 이상적으로 는 라인 기반 도구를 사용하여 구문 분석을 위해 형식을 다시 지정하기 전의 원본 XML 파일 xmlstarlet과 유사한 XML 파서를 사용하는 것이 좋습니다.xq

관련 정보