2015-12-29 23 views
-1

刪除字符串模式文件包含字符串像以下:TCL:grep的,正則表達式從文件

str1.str2. 
str1.str2.str3. 
str1.str2.str3.1. 
str1.str2.str3.1.p 

當行解析文件中的行,如果$str = "str1.str2."然後刪除所有字符串除了str1.str2.str3. 的,我用這個:

exec sh -c "grep $str file |grep -v $str[A-Za-z_0-9]\+\.[A-Za-z_0-9] |grep -v ^$str.$ > dest_file" 

但是這一個我不能使用「無效的命令[A-ZA-z_0-9] !!

有什麼不對本TCLç ommand

+1

回想一下,Tcl的命令替換語法是帶有方括號的[[command]]。由於grep管道是雙引號字符串,因此Tcl將嘗試對字符串執行命令和變量替換。您需要轉義'[' - 參見http://www.tcl.tk/man/tcl8.6/TclCmd/Tcl.htm –

+1

您也有與您的其他問題相同的問題。任何你想傳遞給shell的反斜槓必須加倍。傳遞給grep的'''錨點應該受到tcl和shell的保護。 –

回答

1

如果我已經明白得很好,其在輸入這樣的文件:

$ cat file 
blah 
str1.str2. 
str1.str2.str3. 
str1.str2.str3.1. 
str1.str2.str3.1.p 
blah 

你想在輸出包含str1.str2.str3.單行。如果是這樣的話,你可以用一個替換您的多個管道,grep的命令:

$ grep -E ${str}[^.]+.\$ file 
str1.str2.str3. 

正如評論這裏報告上面,你將不得不通過他們加倍「保護」從TCL替代反斜槓。