일부 처리 후 입력 파일은 다음과 같습니다.
파일 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~
.