【发布时间】:2016-11-15 01:12:12
【问题描述】:
我需要检查 txt 文件中的多个短语,如果文件在特定行中包含它们,请从 txt fie 中删除该行。
对包含需要删除的短语的文件使用反向 grep 可以作为一种魅力。
问题是我需要搜索每行的一部分,而不是整行。
我只需要检查第 10 个逗号字符之前的部分行。 如果 grep 找到之后的短语,我想保留该行,如果 grep 在该点之前匹配,我想删除该行。
我不知道如何将正则表达式与短语文件一起使用。欢迎任何建议。
#!/bin/bash
shopt -s globstar
for f in /uploads/txt/original/**/*.txt ; do
grep -i -v -w -f phrase.txt "$f" > tmp
mv tmp $f
done
echo "Finished!"
编辑
# Rule to set the flag if the line needs to be printed or not
{
ok = 1
# loop upto tenth column
for (i = 1; i <= 10; i++){
# match against each pattern
for (p in PATS) {
if ($i ~ p) {
ok = 0
}
}
}
}
这是否意味着每一列都会再次运行 PATS?
是否可以将 10 列合并到一个字符串中,然后再次检查所有模式,而不是针对所有模式检查 10 列?
【问题讨论】:
-
你能用
grep -i -v -w -f phrase.txt <(cat /uploads/txt/original/**/*.txt)避免循环吗? -
@WalterA not sure how cut line is phrase.txt 在这种情况下会有所帮助,因为我需要在 txt 文件中搜索部分行,而不是在包含我的短语的短语.txt 中在那些 txt 文件中搜索。
-
混合了文件。您可以在
-
@JayRajput 你能看看问题的编辑部分吗?我正在尝试提高速度并尝试了解它当前的工作原理