gpt4 book ai didi

"it does NOT start with KEYWORD1"的正则表达式

转载 作者:行者123 更新时间:2023-12-01 07:41:17 25 4
gpt4 key购买 nike

考虑 MySQL 查询的 tee 导出。

SELECT * FROM mytable;
+----------+-------+----------+-----------+-------+------+--------+
| label1 | lbl2 | label3 | label4 | lbl5 | lbl6 | label7 |
+----------+-------+----------+-----------+-------+------+--------+
| ABCDEFGH | YNNYY | 0.001596 | 0.161152 | 2 | 1 | a |
| ABCDEFGH | YNNYY | 0.001404 | 0.162774 | 3 | 1 | a |
*
*
*
| ABCDEFGH | YNNYY | 0.001286 | 10.941642 | 5999 | 1 | a |
| ABCDEFGH | YNNYY | 0.001315 | 10.942950 | 6000 | 1 | a |
+----------+-------+----------+-----------+-------+------+--------+
9995 rows in set (0.04 sec)

我想通过 sed 或 perl 处理这个 mysqlqtee.txt 文件,只过滤实际的数据行。

我可以告诉 sed 或 perl:“请注释掉以 '| AB' 的静态文本开头的每一行!”

sed -i '.old' 's/\(^\| AB.*\)/#\1/g' mysqlqtee.txt
perl -pi.old -e 's/(^\| AB.*)/#$1/g' mysqlqtee.txt

这些让我:

SELECT * FROM mytable ORDER BY timecode;
+----------+-------+----------+-----------+-------+------+--------+
| label1 | lbl2 | label3 | label4 | lbl5 | lbl6 | label7 |
+----------+-------+----------+-----------+-------+------+--------+
#| ABCDEFGH | YNNYY | 0.001596 | 0.161152 | 2 | 1 | a |
#| ABCDEFGH | YNNYY | 0.001404 | 0.162774 | 3 | 1 | a |
*
*
*
#| ABCDEFGH | YNNYY | 0.001286 | 10.941642 | 5999 | 1 | a |
#| ABCDEFGH | YNNYY | 0.001315 | 10.942950 | 6000 | 1 | a |
+----------+-------+----------+-----------+-------+------+--------+
9995 rows in set (0.04 sec)

很好地注释掉所有实际数据行,并保持其他每一行不变。

到目前为止,我无法告诉 perl 或 sed 的是:“请注释掉除 '| AB' 的静态文本以外的任何内容开头的每一行!”这会让我:

#SELECT * FROM mytable ORDER BY timecode;
#+----------+-------+----------+-----------+-------+------+--------+
#| label1 | lbl2 | label3 | label4 | lbl5 | lbl6 | label7 |
#+----------+-------+----------+-----------+-------+------+--------+
| ABCDEFGH | YNNYY | 0.001596 | 0.161152 | 2 | 1 | a |
| ABCDEFGH | YNNYY | 0.001404 | 0.162774 | 3 | 1 | a |
*
*
*
| ABCDEFGH | YNNYY | 0.001286 | 10.941642 | 5999 | 1 | a |
| ABCDEFGH | YNNYY | 0.001315 | 10.942950 | 6000 | 1 | a |
#+----------+-------+----------+-----------+-------+------+--------+
#9995 rows in set (0.04 sec)

我似乎无法将 "IT DOESN'T START WITH" 部分翻译成正则表达式。同时使用 ^ 表示 NOT 和 LINE_START 会造成麻烦。我可以用 s/^[^\|]/ 否定起始字母,但这也会留下标题行。

我设法在 perl 中使用 IF 语句做到了这一点。但它仍然让我感到不安,以至于我不能用一个 s///g 来完成它。可以那样做吗?

如何将 "IT DOESN'T START WITH" 部分翻译成正则表达式? sed 或 perl 解决方案都可以!

最佳答案

如果您使用前瞻性,此任务会变得很容易。不要使用捕获组,只需断言文本是或不是您要查找的内容即可。

注释行:

perl -pi.old -e's/^(?=\| AB)/#/' mysqlqtee.txt

注释所有其他行:

perl -pi.old -e's/^(?!\| AB)/#/' mysqlqtee.txt

关于 "it does NOT start with KEYWORD1"的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8964241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com