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

为什么我的sed搜索在字段中找不到alpha?,sed,Sed,我想知道为什么myfile.sed中的搜索条件无法过滤。我只想过滤第一列中的任何alpha。也就是说,我想过滤行开始后的任何alpha,后跟一个“chracter,并以一个”字符和一个,字符结尾,但我将在后续列中获取数据: 我正在使用 sed-f myfile.sed在文件中 myfile.sed的内容如下所示 { /^"[0-9]+[^0-9]+[0-9]*",/p /^"[0-9]+",""/p } 文件中包含要筛选的数据的前几个字段 “1866TL”、“1

我想知道为什么myfile.sed中的搜索条件无法过滤。我只想过滤第一列中的任何alpha。也就是说,我想过滤行开始后的任何alpha,后跟一个
chracter,并以一个
字符和一个
字符结尾,但我将在后续列中获取数据:

我正在使用

sed-f myfile.sed在文件中

myfile.sed的内容如下所示

{
        /^"[0-9]+[^0-9]+[0-9]*",/p
        /^"[0-9]+",""/p
}
文件中包含要筛选的数据的前几个字段

“1866TL”、“1866TL”、“ME”、“SUBA”、“GRY”、“B”、“25”、“40”、“湖山大道”

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

为了实现这一点,我尝试用
[^0-9A-Za-z]
替换
字符

我试着只搜索几个数字后跟一个字符,但无法实现这一点

我做错了什么

在将myfile.sed更正为@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-9]\+[^0-9]\+[0-9]*",/p
如果不希望求反字符类与逗号和双引号匹配,请包括它们:

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

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",

谢谢。我得到的太多了,但至少是我想要的那一行。我编辑了OP并重新问了问题。我更新了OP以使其更清晰。基本上,我只想在第一个逗号(,)之前有一个字母的情况下打印字符。尝试了您的示例,但仍然得到所有行。此答案修复了原始脚本中+的用法。@octopusgrabbus:您是否使用
sed-n
运行它?否则,
sed
将始终打印,即使它与任何内容都不匹配。谢谢。我忘记了-n,这将修复它。而不是专注于您不需要的内容(数字或其他非字母字符),始终尝试根据您要查找的内容(字母字符)编写文本处理脚本,最终结果几乎总是更清晰、更简单、更易于维护。