…
쉘 스크립트를 사용하여 파일에서 줄임표( )를 제거하는 데 도움이 필요합니다 . 이 명령을 다양한 형태로 사용해 보았지만 sed
Unix 시스템에서 실행할 때는 도움이 되지 않습니다.
다음 명령을 사용했지만 유닉스 서버에서 실행할 때는 도움이 되지 않습니다.
sed 's/…//g' $x >> $x.tmp
sed 's/\.\.\.//g' $x >> $x.tmp
awk '{gsub(/\.\.\./,"", $0); print}' "Input.TXT" > Output.txt
$x
파일명만요.줄임표의 ANSI 16진수 값은
0x85
유니코드입니다. 16진수 값은U+2026
유니코드입니다. 숫자는 다음과 같습니다.8230
나는
sed
명령을 시도했다\u2026
sed 's/\u2026//g' $x >> $x.tmp
하지만 그것도 도움이 되지 않습니다.
입력 예:
…ABC …DEF …123 …456
예외 출력:
ABC DEF 123 456
…
이는 타원(예: 점 3개) 을 올바르게 읽지 못하는 Unix 서버에서 발생하는 문제입니다 . vi
유닉스 터미널에서 원시 파일을 보면 아래 표시된 것처럼 타원이 회색으로 표시되는 반면 <85>
다른 텍스트는 일반적으로 검은색 텍스트로 표시됩니다.
<85>ABC
<85>DEF
<85>123
<85>456
답변1
이것이 정답인지는 확실하지 않지만 시도해 볼 가치가 있습니다. sed
로 시도해 봤다고 말했지만 …
, 표시는 되지만 …
실제로는 가 아닌 경우 …
보시 vim
다시피 문자입니다 0x85
. 이것을 시도해 보세요. 작동합니까? :
sed 's/'$(printf "\x85")'//g' $x >> $x.tmp
답변2
…
예를 들어 질문의 예제 입력 파일을 사용하는 경우 입력 파일의 동일한 내용을 sed 명령에 복사하여 붙여넣기만 하면 됩니다 .
$ cat file
…ABC …DEF …123 …456
$ read -n1 chr < file
$ sed "s/$chr//g" file
ABC DEF 123 456
그것이 무엇인지 확인하세요 …
(3이 아님 .
):
$ cat -A file
M-bM-^@M-&ABC M-bM-^@M-&DEF M-bM-^@M-&123 M-bM-^@M-&456$
$ echo sed 's/…//g' file | cat -A
sed s/M-bM-^@M-&//g file$
$ od -c file
0000000 342 200 246 A B C 342 200 246 D E F 342 200
0000020 246 1 2 3 342 200 246 4 5 6 \n
0000034
$ echo sed 's/…//g' file | od -c
0000000 s e d s / 342 200 246 / / g f i l
0000020 e \n
0000022
~에 따르면https://www.freecodecamp.org/news/ascii-table-hex-to-ascii-value-character-code-chart-2/<85>
그러나 편집기에 다음이 표시되면 이 문자를 줄임표로 사용해야 합니다.
Decimal Hex Binary HTML Number HTML Name Character Description
133 85 10000101 … … … Horizontal ellipsis
그러나 입력 파일의 내용을 sed 명령에 복사/붙여넣기만 하면 그것이 무엇인지 상관하지 않습니다.
$ printf '\x85ABC \x85DEF \x85123 \x85GHI\n' > file2
$ cat file2
▒ABC ▒DEF ▒123 ▒GHI
$ read -n1 chr < file2
$ sed "s/$chr//g" file2
ABC DEF 123 GHI
답변3
0x85 예Windows-125xU+2026 문자 인코딩이므로 파일이 Microsoft 인코딩으로 인코딩될 수 있습니다.
다음을 사용하여 특정 바이트 값을 삭제할 수 있습니다.
perl -pi -e 's/\x85//g' that-file
그러나 Microsoft에서 인코딩한 다른 문자는 여전히 남아 있을 수 있습니다.
다음과 같이 할 수도 있습니다.
tr -d '\205' < windows-file |
iconv -f windows-1512 |
dos2unix > unix-file
이러한 문자를 제거하려면 인코딩을 UTF-8로 변환하고(windows-1252를 파일의 실제 인코딩으로 대체) 줄 구분 기호 및 기타 Microsoft 문제를 수정하세요.
답변4
사용행복하다(이전 Perl_6)
~$ raku -pe 's:g/\x[2026]//;' file
#OR:
~$ raku -pe 's:g/\x2026//;' file
또는:
~$ raku -pe 'tr/\x2026//;' file
#OR:
~$ raku -ne '.trans("\x2026" => "").put;' file
여기에 대한 대답은 …
, 즉 단일 문자 U+2026이 있다고 가정합니다. 처음 세 가지 답변은 -pe
한 줄씩 자동 인쇄 플래그를 사용합니다. 처음 두 답변의 사용 s///
및 표시 문자는 \x[2026]
또는 으로 올바르게 식별될 수 있습니다 \x2026
. 세 번째 답변의 사용법은 tr///
답변 2와 유사합니다. 네 번째 답변은 pair 매개변수를 사용하는 -ne
루틴에서 자동 인쇄가 아닌 한 줄씩 플래그를 사용합니다 ..trans
입력 예:
…ABC
…DEF
…123
…456
…
HORIZONTAL ELLIPSIS
Unicode: U+2026, UTF-8: E2 80 A6
예제 출력:
ABC
DEF
123
456
HORIZONTAL ELLIPSIS
Unicode: U+2026, UTF-8: E2 80 A6
참고: 유니코드 번호 대신 표준 유니코드 이름으로 문자를 식별할 수 있습니다. 이 경우 \c[HORIZONTAL ELLIPSIS]
예를 들면 다음과 같습니다.
~$ raku -pe 's:g/\c[HORIZONTAL ELLIPSIS]//;' file
\c[APOSTROPHE]
표준 유니코드 이름을 사용하면 구두점 문자를 바꾸거나 균등화할 때와 같이 코드 가독성을 높이는 데 도움이 됩니다 \c[QUOTATION MARK]
.
https://docs.raku.org/언어/operators#s///_in-place_substitution
https://docs.raku.org/언어/operators#tr///_in-place_transliteration
https://docs.raku.org/routine/trans
https://raku.org