다음과 같은 텍스트 파일이 있습니다.
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/,$//'