我收到了一些需要加载到数据库中的文件。这些文件具有用户输入,并且在某些情况下使用引号字符的次数为奇数。我想过滤掉这些记录。
我想 grep 包含特定字符的行奇数或偶数次。
输入示例:
12345|what"s wrong|20121212
答案1
和awk
:
awk -F \" 'NF % 2' < yourfile
对于偶数次(字段以"
- 分隔的字段数为奇数)。
awk -F \" 'NF % 2 == 0' < yourfile
或者将文件拆分为两个文件:
awk -F \" '{if (NF%2) print > "even.txt"
else print > "odd.txt"}' < yourfile
为奇数次。
grep
对于偶数,用,:
grep -Ex '(([^"]*"){2})*[^"]*'
对于奇数,请添加该-v
选项。
答案2
选择珀尔方法:
-- 输出"
出现奇数次的行
perl -ne 'print if y/\"// % 2' yourfile
-- 输出出现偶数的"
行
perl -ne 'print if y/\"// % 2 == 0' yourfile
y///
- Perl 音译运算符
答案3
sed -ne '
h;:a
s/"//;T
s/"//;ta
g;p
' yourfile
在职的
- 保存原件,因为破坏过程将开始。
- 我们设置一个循环,当第一个 del 不成功时,我们一次连续地清除一个引号 => 终止该行的操作 => 存在偶数个引号。
- 在第二次清理中,如果我们不成功=>奇数个引号,那么我们从保留的原件中检索并打印。
- 否则我们循环回来。