0

私はMACでそれを使用していたUNIXユーティリティの使用に関するチュートリアルを見ていました.私はWindowsラップトップを持っていたので、Gnuwin32パッケージ をダウンロードしました.

チュートリアルのコマンドラインは次のとおりです。

tr -sc 'A-Za-z' '\n'  < filename.txt |less 

それは彼と一緒に働いたが、私が試してみると、文字の後にシングルクォート「'」文字を入れた

'S'h'a'k'e's'p'e'a'r'e'T'H'E'T'E'M'P'E'S'T'f'r'o'm'O'n'l'i'n'e'L'i'b'r'a'r'y'o'f'L'i'b'e'r't'y'h't't'p'o'l'l'l'i'b'e'r't'y'f'u'n'd'o'r'g'

私は試した

tr -sc "A-Za-z" "\n"  < filename.txt |less 

各文字の後に改行を追加しました

n
e
L
i
b
r
a

賛辞オプションを削除して、正規表現に ^ を追加しようとしました

tr "[^A-Za-z]" "\n"  < filename.txt |less 

結果はすべてをに置き換えていletterましたnewline

問題は、GNUwin32 の UNIX ユーティリティのコマンド ライン オプションが他と異なるかどうかです。そして、「AZ」のような単一引用符の間に正規表現を入れることは「AZ」とは異なります。そうであれば、上記の失敗した試行を除いて、すべての非文字を改行に置き換える最良の答えは何でしょうか

私が試していたテキストのソース

4

3 に答える 3

1

私のtr --version(GNU coreutils)8.5であなたの例をテストしました

1) 一重引用符または二重引用符を使用しても違いはありません 2) ^ を使用して文字を否定する方法がないように見えます

[^A-Za-z]これらすべての文字を記述すると、文字どおりに処理されます。

echo "abc abd [hh] d^o 1976" | tr '[^A-Za-z]' '.'

または二重引用符で

echo "abc abd [hh] d^o 1976" | tr "[^A-Za-z]" '.'

次の出力を生成します

... ... .... ... 1976

これは、すべてのアルファベット文字、キャレット、および角括弧が文字どおりに処理され、置き換えられたことを証明しています。

これにより、アルファベット以外の文字で分割するには、最初の例とまったく同じように-crangeを使用する必要があるという結論に至ります。'A-Za-z'

于 2012-03-09T18:35:05.167 に答える
0

うーん..

$ tr -sc '[A-Za-z]' "\n" < getCokeInfo_viaFinger_cmu.awk
bin
gawk
f
BEGIN
wisc
edu
finger

....

char-class([A-Za-z])を使用したことに注意してください。多分あなたtrもそれを必要とします。

これがお役に立てば幸いです。

于 2012-03-08T19:48:15.150 に答える
0
cat file.txt | sed -re 's/[^a-zA-Z]/\n/g'

;)

于 2012-03-10T19:53:07.033 に答える