正規表現エラー

正規表現エラー

私はawkを使用して見つけるためにBashスクリプトを使用しています。(0010,0080)awkは通常、括弧の間にカンマで区切られた数値を検索します。私が考えることができるすべての措置を講じましたが、テキストファイルに追加しても結果は得られません。私の正規表現は次のとおりです

awk '/\([0-9]{4},[0-9]{4}\)/' dcmResults.txt >> ~/export/"$1"/tagResults.txt

エスケープ文字を使用しないことを含め、角括弧でエスケープ文字を使用するほとんどすべてのバリエーションを実行しましたが、テキストファイルに追加すると結果はありません。誰かが私が間違っていることを教えてもらえますか?

更新すると、スクリプト全体は次のようになります。

#!/bin/bash
echo "Enter SUID: "
read uid
echo "Enter Tag Number: "
read dicomTag

dicomDump() {
        arg1=$1
        cd ~/export/"$1"
        dcmdump *.dcm > ~/export/"$1"/dcmResults.txt
}
tagFinder() {
        arg1=$1
        arg2=$2
        for i in $(cat ~/export/"$1"/dcmResults.txt); do 
            grep "$2" | awk '/[0-9]{4},[0-9]{4}.*/' dcmResults.txt >> ~/export/"$1"/tagResults.txt
        break
done;
}
dicomDump "$uid"
tagFinder "$uid" "$dicomTag"

答え1

Gnu Awkは4.0で間隔式(ユーザー定義)を含め始めました{4}[0-9]

伝統的に、awkでは間隔式は提供されていません。 awkとegrepが互いに一貫性を持つようにするために、POSIX標準の一部として追加されました。

最初は、gawkが正規表現の間隔式と一致しませんでした。以前のプログラムでは、正規表現定数に「{」と「}」を使用できたためです。

しかし、バージョン4.0以降、gawkはデフォルトで間隔式と一致します。ほとんどのgawkユーザーにとっては、以前のプログラムとの互換性よりもPO​​SIXとの互換性が重要です。

正規表現定数に「{」と「}」を使用するプログラムでは、常にバックスラッシュを使用してエスケープするのが最善です。その後、awk.17のすべてのバージョンを使用すると、正規表現定数が有効で、望ましい方法で動作します。

バラより手動入力

答え2

この行を見ると、2つの問題があると思います。

grep "$2" | awk '/[0-9]{4},[0-9]{4}.*/' dcmResults.txt >> ~/export/"$1"/tagResults.txt
  1. 次の操作を完了できますgrep

    grep -e "$2" -e '([0-9]\{4\},[0-9]\{4\})' dcmResults.txt >> ~/export/"$1"/tagResults.txt
    
  2. 入力はどこからgrep来、出力はどこに行きますかgrep?入力ファイル名があるのでawk標準入力を無視します。

関連情報