2017-05-18 13 views
3

に文字クラス内のブラケットを使用する:私は、文字列を持っている正規表現

['A', 'B'] 

私はすべての,[を削除し、]文字にする必要があります。最終的な結果は以下

'A' 'B' 

私が試したすべてのリストがあるべきである、との結果が

コマンドは、私はそれらのどれも働いていない、

[email protected]:~$ echo "['A', 'B']" | sed -r 's/[\[\],]//g' 
['A', 'B'] 

[email protected]:~$ echo "['A', 'B']" | sed -r 's/[[],]//g' # unescaped 
['A', 'B'] 

[email protected]:~$ echo "['A', 'B']" | sed -r 's/[\[\]]//g' # removed "," 
['A', 'B'] 

[email protected]:~$ echo "['A', 'B']" | sed -r 's/[,]//g' #removed "[" and "]" 
['A' 'B'] 

[email protected]:~$ echo "['A', 'B']" | sed -r 's/[[,]//g' # removed "]" 
'A' 'B'] 

明らかてみました。ただし、これらのコマンドは次のようになりました。

[email protected]:~$ echo "['A', 'B']" | sed -r 's/[],[]//g' 
'A' 'B' 

[email protected]:~$ echo "['A', 'B']" | sed -r 's/[][,]//g' 
'A' 'B' 

上記および下記のコマンドの違い:

  • []がエスケープされません
  • 注文は

なぜオーダー状物質([前])違うのですか?それはリスト内の任意の 単一の文字ないと一致するようにinfo sedから

+3

チェック '男のsed'または'情報sed'(GNUがSED)...それは元のために...言及される可能性があります適しています:参照https://www.gnu.org/software/sed/manual/sed.html#Character-Classes-and-Bracket-Expressions .. '']'文字をリスト項目にするには、まずそれを置く必要があります.' – Sundeep

+3

エスケープされていない ']'は、BREや拡張正規表現の文字クラスの最初に置く必要があります。 – anubhava

+2

'sed'をスキップして、代わりに' tr'を使います。 –

答えて

4

(もhttps://www.gnu.org/software/sed/manual/sed.html#Character-Classes-and-Bracket-Expressions参照)

'^' をリードするには、LISTの意味を反転させます。リストに ']'を含めるには、 を最初の文字(必要に応じて '^'の後に)にし、リストに ' - ' を含めます。 '^'を含めるには、最初の文字の後に と置きます。

やコメントで述べたように、tr

$ echo "['A', 'B']" | tr -d '[],' 
'A' 'B' 
関連する問題