…
シェルスクリプトを使用してファイルから省略記号()を削除するのに役立ちます。私はこのコマンドをさまざまな形で試しましたが、sed
Unixシステムで実行しても役に立ちません。
次のコマンドを使用しましたが、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
Unicodeです。 16進値はU+2026
Unicodeです。数字は次のとおりです。8230
私は
sed
コマンドを試しました\u2026
sed 's/\u2026//g' $x >> $x.tmp
しかし、それも役に立ちません。
入力例:
…ABC …DEF …123 …456
例外出力:
ABC DEF 123 456
…
これは、楕円(3つの点など)が正しく読み取られないUnixサーバーで発生する問題です。vi
Unix端末で生のファイルを見ると、下に示すように楕円は灰色で表示されますが、<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があると仮定します。最初の3つの答えは、-pe
1行ずつ自動印刷フラグを使用します。最初の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