2017-04-10 8 views
1

私は小さなタスクを持っています。bashで変数の文字列型の区切り文字を変更します。

data="duke,rock,hulk,donovan,john" 

をし、次の変数で、私は、最初の変数の区切り文字を変更する必要があります。

私が書く必要があります。

data2="duke|rock|hulk|donovan|john" 

bashでこれを行う正しい方法は何ですか?

これはスクリプトの一部ですが、どうすればいいですか。

たとえば、「WHILE-GETOPS-CASE」という構文を使用して、ユーザー名をパラメータとして除外します。

ls /home/ | egrep -v $data2 
+1

をあなたは 'のegrep -v「$をしたいですシェルが値に対してワイルドカード展開または空白トークン化を実行しないようにします。 – tripleee

+1

'ls'の出力を解析しません。パターンと一致しないファイルが必要な場合は、拡張パターンを使用してください。 'ls/home /!(duke | rock | hulk | donovan | john)'です。 – chepner

答えて

5

あなたは簡単に拡張して単一の文字を置き換えることができます。

data="duke,rock,hulk,donovan,john" 
data2=${data//,/|} 
echo "$data2" 

構文を破壊:

  • ${dataは「変数dataで見つかった値に基づいて展開する手段、
  • //は「すべての出現を検索」を意味します;
  • 孤独な/は、「次のもので置き換える」を意味します。

一部の文字はエスケープする必要がありますが、カンマと垂直バーはエスケープする必要がないことがあります。

次に、あなたは、このような結果をフィルタリングすることがあります。

ls /home/ | egrep -v "$data2" 
1

もう一つの非常に似た方法がtrを使用することです(文字を変換または削除):

data="duke,rock,hulk,donovan,john" 
data2=$(echo $data | tr ',' '|') 
echo "$data2" 
関連する問題