다른 데이터 소스에서 데이터를 가져오고 있는데 거의 문제가 없습니다. 그 중 하나는 텍스트 필드에서 나옵니다. 사용자가 텍스트 열에서 Enter 키를 누르면 내보내기가 이를 줄 끝으로 처리합니다. 그러면 데이터가 아래와 같이 표시됩니다.
"abc"|"def"|12/28/2019|"hello world"|$
"abc"|"def"|12/28/2019|"Nice$
weather"|$
니스 후에 선 구분 기호를 제거하고 니스 후에 날씨를 이동할 수 있는 방법이 있습니까?
"abc"|"def"|12/28/2019|"hello world"|$
"abc"|"def"|12/28/2019|"Niceweather"|$
파이프 뒤의 선 구분선을 제외하고 제거하려고 하는데 어떻게 해야 할지 모르겠습니다. 도와주세요?
답변1
다음 변형을 사용할 수 있습니다39. 줄이 백슬래시 "\"로 끝나면 다음 줄에 추가합니다.~에서Sed 한 줄 설명, 1부: 파일 간격, 번호 매기기, 텍스트 변환 및 교체
\
이전 줄이 다음으로 끝날 때 참여하고 싶지 않습니다.확실히다음으로 끝납니다 |
.
$ cat -A file.psv
"abc"|"def"|12/28/2019|"hello world"|$
"abc"|"def"|12/28/2019|"Nice$
weather"|$
그 다음에
$ sed -e :a -e '/|$/!N; s/\n//; ta' file.psv | cat -A
"abc"|"def"|12/28/2019|"hello world"|$
"abc"|"def"|12/28/2019|"Niceweather"|$
파일에 DOS 스타일 CRLF 줄 끝이 있는 경우
$ cat -A file.psv
"abc"|"def"|12/28/2019|"hello world"|^M$
"abc"|"def"|12/28/2019|"Nice^M$
weather"|^M$
그런 다음 명령을 다음으로 변경하여 이를 고려할 수 있습니다.
sed -e :a -e '/|\r$/!N; s/\r\n//; ta' file.psv
파일을 제자리에서 편집하려면 백업을 추가 -i
하거나 저장하세요. -i.bak
파일을 Unix 줄 끝으로 변환하려면 다음을 추가하십시오.-e 's/\r$//'
sed -i.bak -e :a -e '/|\r$/!N; s/\r\n//; ta' -e 's/\r$//' file.psv