AWK删除含_wc_session_的整行报错,求解决方案
解决AWK语法错误并删除包含特定字符串的行
你的问题出在AWK的正则匹配语法上——AWK判断行是否匹配正则的正确格式是~/正则表达式/,而你直接把正则表达式写在括号里,AWK无法解析这种语法,所以才会抛出syntax error。
修正后的命令
如果你只想删除所有包含_wc_session_的行,最简洁的命令是:
awk '!/_wc_session_/' db.sql > temp.sql
如果你需要严格匹配你描述的那种格式(以(开头、包含_wc_session_、以,)结尾的行),可以用你原来的正则,但要套上AWK的匹配语法:
awk '!/^\(.*_wc_session_.*\),/' db.sql > temp.sql
为什么这个命令能行?
!/正则/表示不匹配该正则的行才会被输出,也就是反向筛选——把包含目标字符串的行过滤掉,剩下的写入temp.sql。- 正则里的
\(是转义括号(因为括号在正则中是特殊字符,需要转义才能匹配字面意义的(),^匹配行开头,确保只过滤符合你给出的行格式的目标内容。
验证效果
用你提供的示例行测试:
(26680, '_wc_session_expires_120f486fe21c9ae4ce247c04f3b009f9', '1445934089', 'no'),
(26682, '_wc_session_expires_73516b532380c28690a4437d20967e03', '1445934114', 'no'),
(26683, '_wc_session_1a71c566970b07ac2b48c5da4e0d43bf', 'a:21:{...}', 'no')
这些行都会被上述命令过滤掉,不会出现在temp.sql中。
内容的提问来源于stack exchange,提问作者Giacomo Scarpino
相关产品推荐
相关产品推荐

