删除文件的当前行

时间:2017-10-20 12:14:10

标签: bash sed grep

我面对的事情看起来容易,却无法找到答案:

此功能的目标是删除包含3个逗号的所有行,',' :

while read line; do                                                                                                    
        COUNT=$(echo $line | grep -o "\," | wc -)
        if [ $COUNT -ne 3 ]; then
               remove line
        fi
done < tmp.txt

我找不到如何删除当前行,你能帮帮我吗?

我从tmp.txt的较大的grep中提取此tmp.txt,如果它在变量而不是while read line; do COUNT=$(echo $line | grep -o "\," | wc -) COUNT=$(echo $line | grep -o "\," | wc -) if [ $COUNT -ne 3 ]; then remove line fi done <<< "$toto" 中会是相同的吗?

.minttyrc

提前致谢

4 个答案:

答案 0 :(得分:4)

仅使用sed命令解决方案。

sed  '/^\([^,]*,\)\{3\}[^,]*$/d' infile
  • 删除字符逗号,正好发生3次的所有行。

或使用awk

awk -F, 'NF!=4' infile

或两者都从变量中读取。

sed  '/^\([^,]*,\)\{3\}[^,]*$/d' <<<"$variable"
awk -F, 'NF!=4' <<<"$variable"

答案 1 :(得分:2)

一个简单的 awk 解决方案

awk 'gsub(/,/,",")!=3' file

gsub用指定的字符串替换模式,并返回替换/替换次数。

我们将,替换为,,因此gsub将返回字符串中,的数量。

示例:

输入文件

hello this line has 1 ,
This line, has, 3 ,
This line, has, 4 , commas , Thanks

<强>输出

$ awk 'gsub(/,/,",")!=3' file
hello this line has 1 ,
This line, has, 4 , commas , Thanks

答案 2 :(得分:0)

我会以另一种方式完成它:

while read line; do                                                                                                    
        COUNT=$(echo $line | grep -o "\," | wc -)
        if [ $COUNT -eq 3 ]; then
               echo $line >> $tempofile
        fi
done < tmp.txt

如果该线匹配,请保留,否则转到下一行。

答案 3 :(得分:-1)

这个简单的命令可以删除包含3

的所有行

$ awk '!/3/' file_name