2017-09-05 18 views
1

文字列「AAAAAAA02」があり、それを「AAAAAAA01」と置き換えたいとします。 は、私が働いていないのsedコマンド、次の試してみました:文字列内の数字を置き換えるための正規表現

sed -e "s|AAAAAAA\\d+$|AAAAAAA01|g;" 
sed -E "s|(AAAAAAA.+)\d+|AAAAAAA01|g;" 
sed -E "s|(AAAAAAA.+)\\d+|AAAAAAA01|g;" 
sed -E "s|AAAAAAA(\\d+)|AAAAAAAD01|g;" 

基本的に私は、正規表現を必要とする誰かがsedコマンドで私を助けることができるならば、それは素晴らしいことだ!!。

編集: これはハードコードされた値01/02と置き換えることができるとわかっていました。しかし、ファイルにはたくさんの行があり、私はそれを総称して置きたいと思っています。 私はRegExを一般的にクリーンアップする必要があります。

+1

最後の '; 'は削除する必要があります。 '\ d'は' [0-9] 'に変更する必要があります。グループが正規表現で使用されている場合、置き換えの部分で逆参照を使用してみませんか? –

+0

ちょうど知ってほしかった、誰でも質問に否定的な、フィードバックを残す方法を改善する。なぜ、あなたはこの質問が役に立たないと思いますか? – VIRA

+1

あなたの「動作していません」は明確に聞こえません。通常は、何が間違っているのか、エラーメッセージなどは何かを説明することをお勧めします。 –

答えて

1

最後に;を削除する必要があります。 \d[0-9]に変更する必要があります。グループが正規表現で使用されている場合、置き換えの部分で逆参照を使用してみませんか?

使用

s='AAAAAAA02' 
echo $s | sed -E "s|(A{7})[0-9]+|\101|g" 

online demoを参照してください。

-Eオプションは、POSIX ERE構文(キャプチャグループを作成するには(...)をエスケープする必要はありませんし、+{...}数量をエスケープする必要はありません)を有効にします。

パターンが一致:

  • (A{7}) - グループ1:7 A S
  • [0-9]+ - 1桁以上の数字

は交換グループ1内のコンテンツ(\1)を挿入し、加算します01を値に設定します。

注:A...<digits>を単語全体と一致させる必要がある場合は、単語境界、\bを使用して、パターン(sed -E "s|\b(A{7})[0-9]+\b|\101|g")を丸めます。

関連する問題