Рассмотрим возможность экспорта запроса MySQL.
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)
Я хотел бы обработать этот файл mysqlqtee.txt с помощью sed или perl, фильтруя только фактические строки данных.
Я могу сказать 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)
Кажется, я не могу перевести "ЭТО НЕ НАЧИНАЕТСЯ" с части в регулярное выражение.
Двойное использование ^ означает НЕТ и LINE_START одновременно вызывает проблемы.
Я могу отменить начальную букву с помощью s/^[^\|]/
, но это также оставляет строку заголовка вне.
Мне удалось сделать это в perl, используя оператор IF
.
Но это все еще беспокоит меня слишком сильно, что я не мог сделать это с одним s///g
.
Можно ли это сделать таким образом?
Как мне перевести "С ЭТОГО НАЧИНАЕТСЯ" часть в регулярное выражение? Хорошо подходит решение sed или perl!