sed는 새 줄에서 문자를 제거합니다

sed는 새 줄에서 문자를 제거합니다

일부 처리 후 입력 파일은 다음과 같습니다.

파일 1.txt

12345|john|student
43321|jack|professor

78965|alex|lecturer

위 파일을 추가로 처리해야 하므로 줄 끝에 개행 문자도 필요합니다. 현재는 다음과 같이 할 수 있습니다.

sed 's/$/|/' file1.txt

위 명령의 출력은 다음과 같습니다.

12345|john|student|
43321|jack|professor|
|
78965|alex|lecturer|

보시 |다시피 빈 줄도 추가됩니다. |다음 명령을 사용하여 다시 빈 줄에서 문자를 제거 하려고 하면 ,

sed 's/|//g' file1.txt

캐릭터 |가 모든 곳에서 제거되었습니다. 빈 줄만 삭제하는 방법은 무엇입니까 |? 또한 빈 줄을 유지해야 합니다.

답변1

다음 명령을 사용하여 이 작업을 수행할 수 있었습니다.

sed 's/^|//' file1.txt

기본적으로 첫 번째 문자만 확인 ^하고 이면 |삭제합니다.

답변2

sed '/../!d;a\ ' file

이는 아래와 거의 동일한 작업을 수행합니다. 2개 이상의 문자를 포함하지 않는 줄을 제거하고 나머지 모든 줄에 공백을 추가합니다.

그러면 귀하의 질문과 유사한 파일이 제공됩니다.

printf '12345|john|student\n|\n|\n|\n%.0b' `seq 1 10` >|./file1.txt

다음과 같습니다.

12345|john|student
|
|
|

그런데 그걸 10번이나 반복했어요.

그런 다음 이:

sed -n '/[^|].*/s//&|\n/p' ./file1.txt

나에게주세요:

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

12345|john|student|

죄송합니다. 답변을 올바르게 작성하는 데 시간이 좀 걸렸습니다. 휴대전화로 답변을 작성하는 것을 중단해야 합니다…

답변3

원본 콘텐츠에서 |비어 있지 않은 줄에 추가할 수 있습니다.

사용 sed:

sed -e '/^$/!s/$/|/' file

사용 perl:

perl -lpe 's/$/|/ if length' file

빈 줄을 제거 하려면 |(두 번째 버전에서):

perl -lpe 's/\|// if length == 1'

답변4

그리고 sed:

sed -i~ -re 's/^\|$//' file

^파이프라인의 시작 \|과 끝을 검색합니다 $. //이 문자를 삭제하세요. 파일의 내부 편집을 사용 -i~ 하고 백업을 생성합니다 file~.

관련 정보