<
데이터 앞에 새 행을 추가하는 방법은 무엇입니까 ?
내 현재 날짜는 다음과 같습니다.
<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
인식하지 못합니다 .\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"
...하지만 이상적으로 는 라인 기반 도구를 사용하여 구문 분석을 위해 형식을 다시 지정하기 전의 원본 XML 파일 xmlstarlet
과 유사한 XML 파서를 사용하는 것이 좋습니다.xq