了解sed命令中的正则表达式

时间:2014-05-29 15:37:47

标签: regex linux bash unix sed

我正在学习Sed而且我已经敲了一个小时才能理解这个命令,这是我书中的例子:

$ sed -n -e '/^[^|]*|[^|]*|56/w dpt_56' -e '/^[^|]*|[^|]*|89/w dpt_89' tel2.txt

$ cat dpt_56
Karama Josette|256 rue de la tempete|56100|Lorient|85.26.45.58
Zanouri Joel|45/48 boulevard du Gard|56100|Lorient|85/56/45/58
$ cat dpt_89
Joyeux Giselle|12. rue de la Source|89290|Vaux|45.26.28.47

她的理解是: - 此命令的目的是在dpt_56文件中存储来自56 ...区的人的行,而对于dpt_89中的89区则相同。

我不明白的是“|”的目的或效果和正则表达式中的“^”字符=> ^[^|]*|[^|]*|56的含义是什么?我所看到的只是“选择不开始零次或多次的每一行”|“或者有几次没有时间”|“......但我感到困惑。

1 个答案:

答案 0 :(得分:1)

表达式[^|]*|表示“任意数量的字符不是|后跟|”。
使用[^|]而不是.的原因是为了确保.通配符不会贪婪地占用太多输入。

看起来sed命令本身正在检查管道分隔输入的第3个字段。如果值以56开头,则会将其写入dpt_56,如果值以89开头,则会将其写入dpt_89