내용별로 마지막 두 줄 삭제

내용별로 마지막 두 줄 삭제

다음과 같은 텍스트 파일이 있습니다.

    FD488AFF,
    FED6ECFF,
    FFA2A2FF,
    FFD7D8FF,
(
)

마지막 문자 뒤에는 개행 문자도 있습니다 ). macOS 터미널을 사용하고 있으며 제거 방법을 찾고 있습니다.마지막 쉼표, 이것(, 그리고 마지막),게다가다음 문자를 반환합니다..

,
(
)

마지막 문자 뒤의 개행 문자)성격인데 제대로 작동하지 못하는 것 같아요. 꼭 그럴 필요는 없지만 sed터미널을 사용해야 합니다.

답변1

파일을 되돌리고 처음 2줄을 삭제하고 3줄에서 쉼표를 제거합니다. 그런 다음 결과를 다시 뒤집으십시오.

tac file | sed '1,2d; 3s/,$//' | tac

동일한 파일에 다시 저장합니다.

... | tac > tmp && mv tmp file

또는 다음 패키지를 사용 sponge하십시오 moreutils.

... | tac | sponge file

다시 생각해 보면 이것이 좋은 접근 방식이 될 것입니다. ed는 실제로파일 편집기이렇게 하면 편집하고 저장할 수 있습니다.

ed file <<'END'
$-1,$d
$s/,$//
wq
END

답변2

가장 효율적이지는 않지만 작업을 완료해야 합니다.

sed '$d' file | sed '$d' | sed '$s/,$//'
    FD488AFF,
    FED6ECFF,
    FFA2A2FF,
    FFD7D8FF

답변3

마지막 두 줄을 제거하려면(각각 여는 괄호와 닫는 괄호 및 그 앞에 쉼표가 포함되어 있는 경우) 슬라이딩 창을 사용할 수 있습니다.

sed  '1N;$!N;${
s/,\n(\n)//
}
P;D' infile

N첫 번째 라인에 있을 때, 이것은 ew 라인을 끌어오고 1, 그런 다음 항상 패턴 공간에 세 라인을 남깁니다(를 통해).N;P;D cycle). la t 라인에 도달하면 1은 쉼표를 제거하고 이어서 ewline, a , 또 다른 ewline 및 a를 제거하려고 $시도합니다.\n(\n)


1: 언제든지 패턴 공간에 3개 이상의 선이 포함될 수 없으므로 여기에 고정할 필요가 없습니다.

답변4

내용별로 마지막 두 줄 삭제

@LewisM의 답변 보기https://unix.stackexchange.com/a/483043/4778

위치별로 마지막 두 줄을 제거하고 세 번째 줄 끝에서 쉼표를 제거합니다.

< «file-name»  head -n -2 | sed -r -e '$ s/,$//'

또는

< «file-name»  sed -nr -e 'x;${d;x;d};1d;p' | sed -r -e '$ s/,$//'

관련 정보