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