为什么我的sed搜索在字段中找不到alpha?

时间:2013-07-09 15:33:58

标签: sed

我想知道为什么myfile.sed中的搜索条件不会过滤。我想过滤第一列中的任何alpha。这是我想在行开头之后过滤任何alpha,然后是"字符,以"字符和,字符结尾,但我在后续列中获取数据:

我正在使用

sed -f myfile.sed in-file

myfile.sed的内容类似于

{
        /^"[0-9]+[^0-9]+[0-9]*",/p
        /^"[0-9]+",""/p
}

包含我想要过滤的数据的文件的前几个字段

"1866TL","1866TL","ME","SUBA","GRY","B","25","40","LAKEHILL AVE"

我对打印上面的行感兴趣,因为非数字 - TL - 出现在第一列中。

为了完成这项工作,我尝试用"代替[^0-9A-Za-z]字符。

我尝试过只搜索一些数字后跟一个字符,但无法使其正常工作。

我做错了什么?

在修改了myfile之后。看起来像@choroba的回答:

{
        /^"[0-9]\+[^0-9]\+[0-9]*",/p
        /^"[0-9]\+",""/p
}

我得到了其他我不打算得到的字段。 如何在逗号后切断搜索?

"940915","L33677","MA","CHEV","RED","R","25","54","GROVE ST",
"1866TL","1866TL","ME","SUBA","GRY","B","25","40","LAKEHILL AVE",
"966011","1942758","NH","AUDI","BLU","","25","13","MT. VERNON ST.",

2 个答案:

答案 0 :(得分:2)

Plus必须被反击以具有特殊含义:

/^"[0-9]\+[^0-9]\+[0-9]*",/p

如果您不希望否定的字符类匹配逗号和双引号,请包含它们:

/^"[0-9]\+[^0-9",]\+[0-9]*",/p

答案 1 :(得分:0)

sed是一个很好的工具,可以在一行上进行简单的替换,其他任何东西只需使用awk:

$ cat file
"940915","L33677","MA","CHEV","RED","R","25","54","GROVE ST",
"1866TL","1866TL","ME","SUBA","GRY","B","25","40","LAKEHILL AVE",
"966011","1942758","NH","AUDI","BLU","","25","13","MT. VERNON ST.",

$ awk -F, '$1 ~ /[[:alpha:]]/' file
"1866TL","1866TL","ME","SUBA","GRY","B","25","40","LAKEHILL AVE",

不可能简单得多,对吧?

FWIW这里是sed等价物:

$ sed -n '/^[^,]*[[:alpha:]]/p' file
"1866TL","1866TL","ME","SUBA","GRY","B","25","40","LAKEHILL AVE",