Sed는 줄을 제거하지만 공백을 남깁니다.


1

이 코드에 문제가 있습니다. 날짜와 일치하는 줄 (제 경우에는 09/05/17)을 제거합니다. 그러나 그 자리에는 빈 줄이 있습니다.

누구든지 해결책을 얻었습니까?

sed -i -e "s|$PrevDay.*$||" $DataFile2

누군가 이것을 시도하는 데 관심이 있다면이 코드가 구현 된 전체 스크립트를 여기에서 볼 수 있습니다 : pastebin.com/9AuQDjtc
Interknet

1
입력 파일의 샘플을 게시하여 솔루션을 테스트 할 수 있도록해야합니다. 참조 비슷한 질문을 한 후 시도 sed -i -e "/$PrevDay.*$/d" $DataFile2. 또는을 사용하십시오 awk -i '!/$PrevDay.*$/ {print $0}' $DataFile2.
simlev

파이프 |분리기 를 유지 하려면sed -i -e "\|$PrevDay.*$|d" $DataFile2
simlev

답변:


0

내 이전 의견을 답변으로 확장합니다.

sed -i -e "\|$PrevDay.*$|d" $DataFile2

설명 : 각 행에서 텍스트를 대체하는 기능을 사용하고 있습니다. |문자를 구분 기호로 선택하고 첫 번째와 두 번째 구분 기호 사이에 제거 할 표현식과 두 번째와 세 번째 구분 기호 사이에 삽입 할 표현식을 작성했습니다. 따라서 라인은 편집되지만 삭제되지는 않습니다.

줄을 삭제하려면 다른 구문을 사용해야합니다.

\||기본값 대신 구분 기호로 정의/

$PrevDay.*$검색 할 패턴이며, $PrevDaybash 스크립트의 변수는 어디입니까?

| 검색 패턴의 끝을 표시

d 패턴과 일치하는 줄이 삭제됨을 의미

참조 유래에 비슷한 질문을.

유닉스 계열의 wolrd에서와 마찬가지로 동일한 결과를 다른 방식으로 수행 할 수 있습니다 (예 : awk; 다음 표현은 "패턴이 일치하지 않으면 전체 줄을 인쇄합니다"를 의미합니다.

awk -i '!/$PrevDay.*$/ {print $0}' $DataFile2

나는 awk가 명령을 찾았습니다. $ PrevDay가있는 줄을 제외한 모든 것을 인쇄했습니다. 파일에 넣을 때 작동하지 않았으므로 sed를 사용하려고했습니다. 설명도 감사합니다. bash 스크립트를 배우는 것은 꽤 재미 있습니다.
Interknet

-1

시도 해봐: sed -i -e "s|$PrevDay.*$||" $DataFile2 | grep -v '^$'

입력 행이 비어 있지 않지만 공백 문자가 포함 된 경우

sed -i -e "s|$PrevDay.*$||" $DataFile2 | grep -v '^[[:blank:]]*$'

안타깝게도 보이지 않는 줄을 제거하지 않는 것 같습니다.
Interknet

@Interknet 편집을 참조하십시오.
HW Wyes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.