파일의 시작과 끝에서 빈 줄을 제거하는 방법은 무엇입니까?

파일의 시작과 끝에서 빈 줄을 제거하는 방법은 무엇입니까?

파일의 시작과 끝에서 빈 줄을 제거하고 싶지만 중간에 비어 있지 않은 줄 사이의 빈 줄은 제거하고 싶지 않습니다. 나는 해결책이 될 것이라고 sed생각 합니다.awk

원천:

1:
2:
3:line1
4:
5:line2
6:
7:
8:

산출:

1:line1
2:
3:line2

답변1

이 시도,

파일 시작 부분에서 빈 줄을 제거하려면 다음을 수행하십시오.

sed -i '/./,$!d' filename

파일 끝에서 빈 줄을 제거하려면 다음을 수행하십시오.

sed -i -e :a -e '/^\n*$/{$d;N;ba' -e '}' file

파일의 시작과 끝에서 빈 줄을 제거하려면 다음을 수행하십시오.

sed -i -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba' -e '}' file

남자들에게서sed,

-e script, --expression=script -> 실행할 명령에 스크립트를 추가합니다.

b label -> label로 분기합니다. label이 생략되면 스크립트 끝으로 분기됩니다.

a -> 줄 뒤에 텍스트를 추가합니다(대체 구문).

$ ->는 마지막 줄과 일치합니다.

n N -> 패턴 공간에 개행 문자를 추가한 후 패턴 공간에 다음 입력 라인을 추가합니다. 더 이상 입력이 없으면 sed는 다른 명령을 처리하지 않고 종료됩니다.

답변2

이 awk 애플릿은 삭제됩니다.시작파일:

awk 'NF {p=1} p'

따라서 tac이것을 반전 라인과 결합하여 다음을 얻을 수 있습니다.

awk 'NF {p=1} p' file | tac | awk 'NF {p=1} p' | tac
line1

line2

훔침@guillermochamorro의명령 대체 팁:

awk 'NF {p=1} p' <<< "$(< file)"

답변3

파일이 메모리 요구 사항을 충족할 만큼 작은 경우:

$ perl -0777 -pe 's/^\n+|\n\K\n+$//g' ip.txt
line1

line2
  • -0777전체 입력 파일 읽기
  • ^\n+문자열 시작 부분부터 하나 이상의 줄 바꿈
  • \n\K비어 있지 않은 마지막 줄에서 개행 문자 삭제 방지
  • \n+$문자열 끝에 하나 이상의 줄 바꿈이 있습니다.

답변4

Raku(이전 Perl_6) 사용:

Raku를 사용하여 에서 파일을 읽는 경우 linestrim기능을 영리하게 사용하면 파일의 시작과 끝에서 빈 줄(예: 공백)을 지울 수 있습니다.

$ raku -e 'lines.join("\n").trim.put;' start_end.txt
lineX
line1

line2
line1

line2
line1

line2
line1



line2
~$

입력 파일은 @schrodigerscatcuriosity에서 사용하는 것과 동일합니다(파일 시작 부분에 두 개의 빈 줄, 파일 끝에 두 개의 빈 줄). 파일의 시작/끝만 정리해야 한다면 trim-leading과가 trim-trailing여러분의 친구입니다.

또는 다음은 일부 Raku 기능을 사용하여 @Sundeep의 Perl5 코드를 매우 간단하게 번역한 것입니다.

raku -e 'S:g/ ^\n+ || \n+$ //.put given slurp;' start_end.txt

Perl5에서 Raku로 번역하는 경우: 파일은 -ed이며 slurpRaku의 비파괴 대체 연산자를 사용합니다.S///결과 문자열 반환. Raku의 교체 연산자는 가장 긴 토큰 일치(LTM, 개선)를 나타내기 때문에 교체는 Raku의 "첫 번째 일치" 교체 연산자를 통해 ||수행 됩니다.|

/kPerl5 및/또는 /KRaku에 해당하는 명령은 간단 <( ... )>하며 개별적으로 또는 쌍으로 사용할 수 있습니다. 이러한 연산자는 정규식 엔진에 <(이전 또는 이후의 일치 항목을 제거하도록 지시합니다 )>. [그러나 \K현재 문제에서는 Raku의 해당 기능이 불필요해 보입니다].

https://raku.org

관련 정보