AWK - 在该行内部与字符串匹配时删除整行

时间:2018-01-19 13:54:05

标签: bash awk

我有一个db.sql,其中包含某些字符串 _wc_session _

http://dummy-domain.local

_wc_session _ 在其中时,我想用AWK删除整行。我的意思是整条线路:

(26680, '_wc_session_expires_120f486fe21c9ae4ce247c04f3b009f9', '1445934089', 'no'),
(26682, '_wc_session_expires_73516b532380c28690a4437d20967e03', '1445934114', 'no'),
(26683, '_wc_session_1a71c566970b07ac2b48c5da4e0d43bf', 'a:21:{s:4:"cart";s:305:"a:1:{s:32:"7fe1f8abaad094e0b5cb1b01d712f708";a:9:{s:10:"product_id";i:459;s:12:"variation_id";s:0:"";s:9:"variation";a:0:{}s:8:"quantity";i:1;s:10:"line_total";d:6;s:8:"line_tax";i:0;s:13:"line_subtotal";i:6;s:17:"line_subtotal_tax";i:0;s:13:"line_tax_data";a:2:{s:5:"total";a:0:{}s:8:"subtotal";a:0:{}}}}";s:15:"applied_coupons";s:6:"a:0:{}";s:23:"coupon_discount_amounts";s:6:"a:0:{}";s:27:"coupon_discount_tax_amounts";s:6:"a:0:{}";s:21:"removed_cart_contents";s:6:"a:0:{}";s:19:"cart_contents_total";d:6;s:20:"cart_contents_weight";i:0;s:19:"cart_contents_count";i:1;s:5:"total";i:0;s:8:"subtotal";i:6;s:15:"subtotal_ex_tax";i:6;s:9:"tax_total";i:0;s:5:"taxes";s:6:"a:0:{}";s:14:"shipping_taxes";s:6:"a:0:{}";s:13:"discount_cart";i:0;s:17:"discount_cart_tax";i:0;s:14:"shipping_total";i:0;s:18:"shipping_tax_total";i:0;s:9:"fee_total";i:0;s:4:"fees";s:6:"a:0:{}";s:10:"wc_notices";s:205:"a:1:{s:7:"success";a:1:{i:0;s:166:"<a href="http://bdebarcelona.cat/carrito/" class="button wc-forward">Ver carrito</a> Se ha añadido &quot;Incienso Gaudí Lavanda&quot; con éxito a tu carrito.";}}";}', 'no'),

到目前为止,我找到了选择整条线路的正确REGEX  当&#34; _wc_session _ &#34;找到了

(26682, '_wc_session_expires_73516b532380c28690a4437d20967e03', '1445934114', 'no'),

但我们尝试运行

(^\(.*_wc_session_.*\)\,)

我得到了

awk '!(^\(.*_wc_session_.*\)\,)' db.sql > temp.sql

我错过了什么吗?

3 个答案:

答案 0 :(得分:3)

如果您设置为awk

awk '!/_wc_session/' db.sql

您也可以sed -i将输出“inplace”(在输入文件中)写入:

sed -i '/_wc_session/d' db.sql

编辑:

使用awk的更精确的方法是使用文件中的固有,作为分隔符,并仅检查相应模式的第2列。如果模式位于不同的列中,并且不应删除该行,则此方法很有用。

awk -F',' '$2 !~ "_wc_session" {print $0}' db.sql

答案 1 :(得分:2)

简单的grep跟随可以帮助你,并且应该做到这一点。

grep -v "(26682, '_wc_session_expires_73516b532380c28690a4437d20967e03', '1445934114', 'no')"   Input_file

编辑: 如果您要删除任何行中只有字符串_wc_session_expires_的行,那么以下内容可能对您有所帮助。

grep -v "_wc_session_expires_"   Input_file

答案 2 :(得分:1)

输入Regex时出错,右边是

BaseUtil.WaitUntilClickable(btnLogin, 10);