2017-02-08 16 views
2

次のように句読点やタブを削除し、テキストファイルの大文字を小文字に変換しています。sedを使用して句読点とタブを削除する

sed 's/[[:punct:]]//g' $HOME/file.txt | sed $'s/\t//g' | tr '[:upper:]' '[:lower:]' 

私は句読点とタブを削除するために、これらの2つの別々のsedのコマンドを使用する必要はありますか、これは単一sedのコマンドで行うことができますか?

また、sedコマンドで$が何をしているのか説明できますか?それがなければ、タブは削除されません。私はマニュアルページを見ましたが、私はこれを言及した何も見ませんでした。

は、入力ファイルは次のようになります。

Pochemu oni ne v shkole? 
Kto tam? 
Otkuda eto moloko? 
Chei chai ona p’et? 
    Kogda vy chitaete? 
    Kogda ty chitaesh’? 

答えて

3

ためy quanitifierでFreeBSD sed

sed -e $'s/\t//g' -e "s/[[:punct:]]\+//g" -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' file 

については、以下のように行うことができ、複数の-e式を持つ単一sed

[2addr]y/string1/string2/ 
     Replace all occurrences of characters in string1 in the pattern 
     space with the corresponding characters from string2. 

I fのGNU sedでは、小文字変換のための\L限定子はうまく動作するはずです。

sed -e $'s/\t//g' -e "s/[[:punct:]]\+//g" -e "s/./\L&/g" 

$'' I0_ol @ ANSI C-like escape sequences.

+0

を有効にするbash引用メカニズムです:あなたは、出力 '--version' sedはできますか? 'GNU sed'で正常に動作しました – Inian

+0

Mac OS Xを使用しています –

+0

' \ L'エスケープは移植性がありません。ポータブル置換は 'y/ABC/abc /'ですが、範囲(ポータブル)にアクセスすることはできませんので、アルファベット、大文字、小文字の全てを列挙しなければなりません。 – tripleee

関連する問題