我想知道为什么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.",
答案 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",