XYZ-123型パターンを取得するためにtclでgrepを実行する方法

XYZ-123型パターンを取得するためにtclでgrepを実行する方法

TCLでこのgrepコマンドを実行するには?

grep '[A-Z][A-Z][A-Z]\-[0-9][0-9][0-9]' file1 > file2

答え1

チクル一重引用符の代わりに中括弧を引用符として使用してください。これは働きます:

grep {[A-Z][A-Z][A-Z]-[0-9][0-9][0-9]} file1 > file2

ただし、一致するものがない場合に表示されます。まだエラーを報告してください。たとえば、次のようになります。

child process exited abnormally
    while executing
"exec grep {[A-Z][A-Z][A-Z]-[0-9][0-9][0-9]} file1 > file2"
    (file "./foo" line 4)

~のためそれ、これTclドキュメントコマンドをブロックで囲む必要があることを示しますcatch。例:

set status 0
if {[catch {exec grep {[A-Z][A-Z][A-Z]-[0-9][0-9][0-9]} file1 > file2} results options]} {
    set details [dict get $options -errorcode]
    if {[lindex $details 0] eq "CHILDSTATUS"} {
        set status [lindex $details 2]
    } else {
        puts "unexpected error $options $results"
        set status 99
    }
}

追加資料:

  • tcl - 中かっこの使い方を理解する
    答えの1つは、中かっこがシェルの一重引用符に似ており、二重引用符がシェルの二重引用符に似ていると述べたが、後者の役割を明確に説明していない。以内に チクルそして二重引用符を使用するとinvalid command name "A-Z"エラーが発生します。

答え2

ただ使ってみましたexecか?

つまり:

exec grep "[A-Z][A-Z][A-Z]\-[0-9][0-9][0-9]" file1 > file2

関連情報