![단어를 새 줄로 바꾸는 방법](https://linux55.com/image/62345/%EB%8B%A8%EC%96%B4%EB%A5%BC%20%EC%83%88%20%EC%A4%84%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
다음 데이터가 포함된 텍스트 파일이 있습니다. 각 줄은 |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
다시 작성$0
OFS
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