使用sed删除任何非形式的内容' ABCD'

时间:2015-07-20 15:30:51

标签: sed

我有一个csv文件,其中一些元素在传输时出现乱码。有效标识符恰好是四个大写字母,例如KFIG。偶尔我会得到一个标识符,如a~K%或其他一些这样的废话。如何使用sed删除这些案例?

我尝试了sed 's/[^A-Z]*//g'但是这仍然会让我在例如我给出的乱码示例中使用单K。如何将命令恰好应用于四个字母?

例如,这是我在文件中的一部分:

)---
*TAR
+FHU
+FWA
+RQE
0KJS
ENOL
ENOV

以上只有两个有效标识符是ENOLENOV。我只是想删除其他人。

1 个答案:

答案 0 :(得分:2)

要删除包含错误标识符的,请使用:

sed -n '/[A-Z]\{4,\}/p'

说明:

  • sed通常在评估所有表达式后打印每一行。 -n选项会抑制此行为,因此我们必须显式打印该行(使用p指令);
  • \{4,\}表示"前一个原子发生四次或更多次",前一个原子为[A-Z];
  • 所以整个命令意味着"只打印那些包含四个或更多连续大字母的行"。