使用sed消除所有与所需表单不匹配的行
我有一个单列csv,看起来像这样:使用sed消除所有与所需表单不匹配的行,sed,Sed,我有一个单列csv,看起来像这样: KFIG KUNV K~LK K7RT 3VGT 有些数据点在传输过程中被弄乱了。我只需要保留以大写字母开头的条目,然后其他三位数字可以是大写字母或数字。例如,在上面的列表中,我必须删除K~LK和3VGT 我知道要删除除大写字母以外的所有字母,我都能写 sed -n '/[A-Z]\{4,\}/p' 我只是想调整一下,最后三位数字可以是大写字母或数字。任何帮助都将不胜感激。只需使用: sed -n '/[A-Z][A-Z0-9]\{3,\}/p' 但是,
KFIG
KUNV
K~LK
K7RT
3VGT
有些数据点在传输过程中被弄乱了。我只需要保留以大写字母开头的条目,然后其他三位数字可以是大写字母或数字。例如,在上面的列表中,我必须删除K~LK
和3VGT
我知道要删除除大写字母以外的所有字母,我都能写
sed -n '/[A-Z]\{4,\}/p'
我只是想调整一下,最后三位数字可以是大写字母或数字。任何帮助都将不胜感激。只需使用:
sed -n '/[A-Z][A-Z0-9]\{3,\}/p'
但是,如果这些标识符确实是文件中的所有标识符,我将提出以下命令(它将确保整行匹配,因此它将拒绝长度超过4个字符的标识符):
表示“在行首匹配零长度字符串”李>^
表示“精确匹配前一个原子的3次出现”,前一个原子为\{3\}
李>[A-Z0-9]
表示“在行尾匹配零长度字符串”$
3FOOB
,因为FOOB
匹配。第二个表达式通过尝试匹配整行来防止出现这种情况。但是,如果您完全确定输入文件中的标识符包含的字符数不超过四个,那么您也可以安全地使用第一个表达式(或者可能是一个变体:[a-Z][a-Z0-9]\{3\}
)。
sed -n '/^[A-Z][A-Z0-9]\{3\}$/p'