단어를 새 줄로 바꾸는 방법

단어를 새 줄로 바꾸는 방법

다음 데이터가 포함된 텍스트 파일이 있습니다. 각 줄은 |END|.

T|somthing|something|END|T|something2|something2|END|

|END|새 줄을 sed 로 \n바꾸려고 합니다 .

 sed 's/\|END\|/\n/g' test.txt

그러나 아래와 같이 잘못된 출력이 생성됩니다.

 T
 |
 s
 o
 m
 e
 ...

하지만 내가 원하는 것은 이것이다.

T|somthing|something
T|something2|something2

나도 그것을 시도했습니다 tr. 그것도 작동하지 않습니다.

답변1

이것을 사용하십시오 :

sed 's/|END|/\n/g' test.txt

sed가 사용하기 때문에 당신이 시도하는 것이 작동하지 않습니다기본 정규식, 그리고 sed 구현에는 \|"또는"(BRE의 일반적인 확장)을 의미하는 연산자가 있으므로 작성하는 내용은 줄 바꿈(빈 문자열 또는 END빈 문자열)으로 대체됩니다.

답변2

다음은 나에게 잘 작동합니다.

$ sed 's/|END|/\
/g' foobar
T|somthing|something
T|something2|something2

Enter 키 뒤에 백슬래시를 추가했습니다.

답변3

당신은 그것을 사용할 수 있습니다 awk:

$ awk -F'\\|END\\|' '{$1=$1}1' OFS='\n' file
T|somthing|something
T|something2|something2
  • -F'\\|END\\|'필드 구분 기호를 다음으로 설정하세요.|END|
  • OFS='\n'출력 필드 구분 기호를 줄 바꿈으로 설정
  • $1=$1필드 구분 기호로 사용하여 awk다시 작성$0OFS
  • 1참값이므로 awk전체 입력 줄이 인쇄됩니다.

답변4

sed빈 줄을 인쇄하지 않는 또 다른 방법은 다음과 같습니다.

sed 's/|END|/\
/g;/^$/!P;D' infile

예를 들어 다음을 입력합니다.

T|one|two|END|T|three|four|END|
T|five|six|END|T|seven|eight|END|
T|nine|ten|END|T|eleven|twelve|END|

산출:

T|one|two
T|three|four
T|five|six
T|seven|eight
T|nine|ten
T|eleven|twelve

똑같은 것 ed:

ed -s infile <<'IN'
1,$j
s/|END|/\
/g
,p
q
IN

관련 정보