0

多くのSQLファイル(できればシェル)の文字列を一括置換する必要があります。置き換える必要のある文字列は次のように(20120408, 20120409, 20120410)なりますが、内部に任意の量の空白を含めることができます(ただし、数字には含まれません)。たとえば、

(20120408,  20120409   , 20120410 ) or 
(    20120408   , 20120409   ,    20120410)

他の文字列を入力する必要があります。たとえば、その代わりに(XXX)を入力します。ブラケットはそのままにしておく必要があります。

よろしくお願いします。

編集。

具体的に説明します。上記のタイプの文字列のみを(xxx)に変換する必要があります。これは、数字が重要であることを意味します。2つの角かっこの間のものだけを交換したくないので、(19002344)を持っている場合は、交換したくありません。

置き換える必要があるのは、上記の3つの数字を括弧で囲み、間に任意の量の空白を入れたものだけです。

これが誤解を解消することを願っています。

4

1 に答える 1

1

これはどう?

sed -e 's/20120408/XXX/' -e 's/20120409/YYY/' -e 's/20120410/ZZZ/' input

出力:

(XXX,  YYY   , ZZZ ) or 
(    XXX   , YYY   ,    ZZZ)

またはすべてを一度に:

$ sed 's/20120408\|20120409\|20120410/XXX/g' input
(XXX,  XXX   , XXX ) or 
(    XXX   , XXX   ,    XXX)

アップデート

$ cat input
(    20120408,  20120409   , 20120410 )
( 20120408,  20120409   , 19002344 )

$ sed 's/^(\s*20120408\s*,\s*20120409\s*,\s*20120410\s*)$/(xxx)/' input
(xxx)
( 20120408,  20120409   , 19002344 )

上記は、1行に1つのエントリを想定しています。複数ある場合は、代わりにこれを使用してください。

sed 's/(\s*20120408\s*,\s*20120409\s*,\s*20120410\s*)/(xxx)/g' input
于 2013-03-15T15:03:09.783 に答える