2

bash スクリプトを使用して、5 つの連続したドットを 1 つのスペースに置き換えたいタイトルがあります。これを行うことは役に立ちません:

tr '.....' ' ' 

明らかに、5 つのドットを 5 つのスペースに置き換えているためです。

基本的に、ナメクジに変更したいタイトルがあります。だから私は使用しています:

tr A-Z a-z | tr '[:punct:] [:blank:]' '-'

すべてを小文字に変更し、句読点とスペースをハイフンに変更しますが、ドットにこだわっています。

私が使用しているタイトルは次のようなものです:Believe.....Right Now

だから私はそれがbelieve-right-now

5 つのドットを 1 つのスペースに変更するにはどうすればよいですか?

4

3 に答える 3

4

文字変換はマッピングを使用して実行されます。つまり、各文字は別のものにマップされます。つまり、tr -d. tr '.....' ' 'これがうまくいかない理由です。

5 つのドットをスペースに置き換える:

  • sed拡張正規表現での使用:

    $ sed -r 's/\.{5}/ /g' <<< "Believe.....Right Now"
    Believe Right Now
    
  • sedなしで使用-r

    $ sed 's/\.\{5\}/ /g' <<< "Believe.....Right Now"
    Believe Right Now
    
  • パラメータ展開の使用:

    $ text="foo.....bar.....zzz" && echo "${text//...../ }"
    foo bar zzz
    

5 つのドットとスペースを-次のように置き換えます。

$ sed -r 's/\.{5}| /-/g' <<< "Believe.....Right Now"
Believe-Right-Now

完全な交換 --tr使用法を捨てる:

$ sed -re 's/\.{5}| /-/g' -e 's/([A-Z])/\l&/g' <<< "Believe.....Right Now"
believe-right-now

または、お使いのsedバージョンが flag をサポートしていない場合-rは、次を使用できます。

$ sed -e 's/\.\{5\}\| /-/g' -e 's/\([A-Z]\)/\l&/g' <<< "Believe.....Right Now"
believe-right-now
于 2013-08-12T17:51:22.583 に答える