쉘 스크립트를 사용하여 파일에서 줄임표(...)를 제거하는 데 도움이 필요합니다.

쉘 스크립트를 사용하여 파일에서 줄임표(...)를 제거하는 데 도움이 필요합니다.

쉘 스크립트를 사용하여 파일에서 줄임표( )를 제거하는 데 도움이 필요합니다 . 이 명령을 다양한 형태로 사용해 보았지만 sedUnix 시스템에서 실행할 때는 도움이 되지 않습니다.

다음 명령을 사용했지만 유닉스 서버에서 실행할 때는 도움이 되지 않습니다.

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 &#133;      &hellip;  …         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

관련 정보