2017-11-16 17 views
1

私は、このファイルのリストを持っていませんもう1つの文字列で置き換えてください。これはテストケースを生成するためのものです。SEDが1つまたは複数のパターンを照合すること

私は年を上手く取ることができますが、その1〜2文字の後に一致するように見えません。

このとなりますか?

~/test_cases 
$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[[:alnum:]]\{1,2\}_/_YY_/' 
one_this_XXXX_YY_abc.txt 
two_that_XXXX_YY_abc.txt 
three_another_XXXX_10.abc.txt 
four_again_XXXX_10.abc.txt 
five_back_XXXX_1a.abc.txt 

2文字の場合を除きます。

$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[[:alnum:]]\ 
{2\}_/_YY_/' 
one_this_XXXX_1_abc.txt 
two_that_XXXX_1_abc.txt 
three_another_XXXX_10.abc.txt 
four_again_XXXX_10.abc.txt 
five_back_XXXX_1a.abc.txt 

は、いずれかの2文字の例では動作しません、これは全く(しかしドキュメントそれが必要に応じて)いない作品:

$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[[:alnum:]]\+_/_YY_/' 
one_YY_XXXX_1_abc.txt 
two_YY_XXXX_1_abc.txt 
three_YY_XXXX_10.abc.txt 
four_YY_XXXX_10.abc.txt 
five_YY_XXXX_1a.abc.txt 

他のランダムな実験は動作しません。 Cygwinの下でGNU Linux上でバージョン4.2.1のsedとのsed(GNU SED)4.4の両方でみた

$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[a-zA-Z0-9]\+_/_YY_/' 
one_YY_XXXX_1_abc.txt 
two_YY_XXXX_1_abc.txt 
three_YY_XXXX_10.abc.txt 
four_YY_XXXX_10.abc.txt 
five_YY_XXXX_1a.abc.txt 

$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[a-zA-Z0-9]\{1\}_/_YY_/' 
one_this_XXXX_YY_abc.txt 
two_that_XXXX_YY_abc.txt 
three_another_XXXX_10.abc.txt 
four_again_XXXX_10.abc.txt 
five_back_XXXX_1a.abc.txt 

$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[a-zA-Z0-9]\{2\}_/_YY_/' 
one_this_XXXX_1_abc.txt 
two_that_XXXX_1_abc.txt 
three_another_XXXX_10.abc.txt 
four_again_XXXX_10.abc.txt 
five_back_XXXX_1a.abc.txt 

はい、私はそれを動作させるために複数のsed呼び出しでパイプすることができますが、その正規表現は正しく機能するはずですか?

+0

質問入力にサンプル入力と希望する出力を追加してください。 – Cyrus

+0

サンプル入力はそこにあります - 私はひどくそれをフォーマットしました。 出力する内容を追加します。 – Petro

答えて

0

あなたのInput_fileが上記のサンプルと同じ場合は、次のように入力してください。

sed 's/\([^_]*\)_\([^_]*\)_\(.*_\)\(.*\)/\1_\2_XXXX_YY_\4/g' Input_file 

出力は以下の通りです。

one_this_XXXX_YY_abc.txt 
two_that_XXXX_YY_abc.txt 
three_another_XXXX_YY_10.abc.txt 
four_again_XXXX_YY_10.abc.txt 
five_back_XXXX_YY_1a.abc.txt 
+0

この正規表現はファイル名の検証と変換に使用され、ファイル名は(この場合は)より規則的です。 私は、この特定のケースを解決するよりも、私が\ {1,2 \}と\ +ビットで間違っていることを理解することにもっと関心があります。 – Petro

関連する問題