我正在学习 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
是什么意思?我所看到的只是“选择不以零或多次“|”开头的每一行,或者没有多次“|”的每一行......但我感到困惑。
最佳答案
表达式 [^|]*|
表示“|
后跟 |
的任意数量的字符”。< br/>
使用 [^|]
而不是 .
的原因是为了确保 .
通配符不会贪婪地吃掉太多输入。
看起来 sed 命令本身正在检查竖线分隔输入的第三个字段。如果值以 56
开头,则将其写入 dpt_56
,如果值以 89
开头,则将其写入 dpt_89
。
关于regex - 理解 sed 命令中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23937178/