シェルスクリプトを使用してファイルから省略記号(...)を削除するのに役立ちます。

シェルスクリプトを使用してファイルから省略記号(...)を削除するのに役立ちます。

シェルスクリプトを使用してファイルから省略記号()を削除するのに役立ちます。私はこのコマンドをさまざまな形で試しましたが、sedUnixシステムで実行しても役に立ちません。

次のコマンドを使用しましたが、Unixサーバーで実行しても役に立ちません。

sed 's/…//g' $x >> $x.tmp
sed 's/\.\.\.//g' $x >> $x.tmp
awk '{gsub(/\.\.\./,"", $0); print}' "Input.TXT" > Output.txt
  • $xファイル名だけです。

  • 省略記号のANSI 16進値は0x85Unicodeです。 16進値はU+2026Unicodeです。数字は次のとおりです。8230

  • 私はsedコマンドを試しました\u2026

    sed 's/\u2026//g' $x >> $x.tmp
    

    しかし、それも役に立ちません。

  • 入力例:

    …ABC
    …DEF
    …123
    …456
    
  • 例外出力:

    ABC
    DEF
    123
    456
    

これは、楕円(3つの点など)が正しく読み取られないUnixサーバーで発生する問題です。viUnix端末で生のファイルを見ると、下に示すように楕円は灰色で表示されますが、<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があると仮定します。最初の3つの答えは、-pe1行ずつ自動印刷フラグを使用します。最初の2つの回答の使用とs///表示文字は、\x[2026]またはで正しく識別できます\x2026。 3番目の答えの使い方はtr///答え2と似ています。 4番目の答えは、pairパラメータを使用する-neルーチンで自動印刷ではなく1行ずつフラグを使用します。.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

注:Unicode番号ではなく、標準のUnicode名で文字を識別できます。この場合、\c[HORIZONTAL ELLIPSIS]例えば次のようになります。

~$ raku -pe 's:g/\c[HORIZONTAL ELLIPSIS]//;'  file

\c[APOSTROPHE]標準のUnicode名を使用すると、句読点文字を変更したり等化したりするときなど、コードの読みやすさを向上させるのに役立ちます\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

関連情報