Sed 一行,删除特定字符出现x次以上的行

Sed 一行,删除特定字符出现x次以上的行,sed,awk,grep,lines,Sed,Awk,Grep,Lines,我认为标题说明了一切,我正在寻找一个一行代码来删除文件中某个特定字符(比如/)出现的次数超过x次的行,例如,5次 开始: /Bo/byl/apointe S/ta/ck/ov/er/flo/w 米/小时/ 预期结果: /Bo/byl/apointe 米/小时/ 谢谢你的建议 您可以使用awk的gsub功能gsub返回成功替换的编号。因此,您可以将其作为参考来标识特定字符的出现次数 awk 'gsub(/\//,"&")<5' file awk'gsub(/\//,“&”)我相信s

我认为标题说明了一切,我正在寻找一个一行代码来删除文件中某个特定字符(比如/)出现的次数超过x次的行,例如,5次

开始:

/Bo/byl/apointe

S/ta/ck/ov/er/flo/w

米/小时/

预期结果:

/Bo/byl/apointe

米/小时/


谢谢你的建议

您可以使用
awk
gsub
功能<代码>gsub返回成功替换的编号。因此,您可以将其作为参考来标识特定字符的出现次数

awk 'gsub(/\//,"&")<5' file

awk'gsub(/\//,“&”)我相信
sed
在这里就足够了。您需要查看
/d
,并提供正确的条件。当我有更好的想法时,我会尝试一些东西并更新,你也应该:)

一旦您找到它,sed-i/{blah}/d
将足以在文件中更改它,但是您可能希望在不使用
-i
的情况下运行它,并首先通过
less
来确认它正在做您认为它正在做的事情。

这样做:

sed -r '/(\/.*){5}\//d' file
这可能适用于您(GNU-sed):

您所需要的只是:

awk -F/ 'NF<6' file

awk-F/'nf对于这样的问题,不要考虑要从文件中删除什么,而是要考虑要从文件中选择什么,这样你就不会落入使用负(或双负!)逻辑的解决方案的陷阱。在这种情况下,您只需选择距离正确方法很远的小于6“/”s的行。。。。即使执行gsub()是必要的或有用的,但事实并非如此,也不需要将整个文件内容保存在数组中并在以后打印,您所要做的就是
awk'gsub(/\/,“&”)@EdMorton感谢您的建议。看来我还有很多东西要学。我已经用你的建议更新了答案(希望没问题)。+1我总是试图找到简单问题的复杂解决方案。@Jaypal解决方案通常来自于你对需求的思考方式。海报上说,他想根据一些标准删除行,但这不是他想要的输出,这是他想采用的过程,以获得他想要的输出。他真正想要的输出是一个文件,其中每行的长度都少于6“/”s。如果他只是这么说的话,那么解决办法是显而易见的。我完全同意。感谢您留下宝贵的反馈。总有一天我会到达那里的!:)
awk -F/ 'NF<6' file
$ cat file
/Bo/byl/apointe
S/ta/ck/ov/er/flo/w
M/oon/

$ awk -F/ 'NF<6' file
/Bo/byl/apointe
M/oon/