regex - 理解 sed 命令中的正则表达式

标签 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 是什么意思?我所看到的只是“选择不以零或多次“|”开头的每一行,或者没有多次“|”的每一行......但我感到困惑。

最佳答案

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

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

关于regex - 理解 sed 命令中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23937178/

相关文章:

正则表达式向后查找字符串和另一个字符串第一次出现之间的所有文本

jQuery 选择器 :contains - Use regular expressions

linux - Git post-receive 钩子(Hook)未执行

node.js - 打开 localhost :3000 in kiosk mode after the Node. js 服务器已完成旋转

linux - awk 在某些命令后不被识别

string - 如何从 Bash 变量中去除空格?

python - 正则表达式在循环期间花费的时间太长

regex - 排除包含我的正则表达式但不是我的正则表达式的单词

java - 在后台安全地长时间运行 java 进程

linux - 获取长字符串中的特定子字符串