我正在学习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
的含义是什么?我所看到的只是“选择不开始零次或多次的每一行”|“或者有几次没有时间”|“......但我感到困惑。
答案 0 :(得分:1)
表达式[^|]*|
表示“任意数量的字符不是|
后跟|
”。
使用[^|]
而不是.
的原因是为了确保.
通配符不会贪婪地占用太多输入。
看起来sed命令本身正在检查管道分隔输入的第3个字段。如果值以56
开头,则会将其写入dpt_56
,如果值以89
开头,则会将其写入dpt_89
。