Bash 删除文件的当前行

Bash 删除文件的当前行,bash,sed,grep,Bash,Sed,Grep,我面临着一些看似简单但却找不到答案的问题: 此函数的目标是删除包含3个逗号“,”的所有行: while read line; do COUNT=$(echo $line | grep -o "\," | wc -) if [ $COUNT -ne 3 ]; then

我面临着一些看似简单但却找不到答案的问题:

此函数的目标是删除包含3个逗号“,”的所有行:

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

提前谢谢

我会用另一种方式来做:

while read line; do                                                                                                    
        COUNT=$(echo $line | grep -o "\," | wc -)
        if [ $COUNT -eq 3 ]; then
               echo $line >> $tempofile
        fi
done < tmp.txt
读行时
;做
计数=$(echo$行| grep-o“\,“| wc-)
如果[$COUNT-等式3];然后
echo$line>>$tempofile
fi
完成

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

我会用另一种方式来做:

while read line; do                                                                                                    
        COUNT=$(echo $line | grep -o "\," | wc -)
        if [ $COUNT -eq 3 ]; then
               echo $line >> $tempofile
        fi
done < tmp.txt
读行时
;做
计数=$(echo$行| grep-o“\,“| wc-)
如果[$COUNT-等式3];然后
echo$line>>$tempofile
fi
完成

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

使用
sed
命令专用解决方案

sed  '/^\([^,]*,\)\{3\}[^,]*$/d' infile
  • 删除所有逗号
    正好出现3次的行
或使用
awk

awk -F, 'NF!=4' infile

或者两者都从变量中读取

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

sed'/^\([^,]*,\)\{3\}[^,]*$/d'使用
sed
命令专用解决方案

sed  '/^\([^,]*,\)\{3\}[^,]*$/d' infile
  • 删除所有逗号
    正好出现3次的行
或使用
awk

awk -F, 'NF!=4' infile

或者两者都从变量中读取

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

sed'/^\([^,]*,\)\{3\}[^,]*$/d'这个简单的命令可以删除包含3行的所有行


$awk'/3/'file\u name

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


$awk'/3/'文件名

一个简单的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

一个简单的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

不是
3
本身,字符逗号
和它在一行中出现3次。不是
3
本身,字符逗号
和它在一行中出现3次。