Sed 一行,删除特定字符出现x次以上的行
我认为标题说明了一切,我正在寻找一个一行代码来删除文件中某个特定字符(比如/)出现的次数超过x次的行,例如,5次 开始: /Bo/byl/apointe S/ta/ck/ov/er/flo/w 米/小时/ 预期结果: /Bo/byl/apointe 米/小时/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
谢谢你的建议 您可以使用
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/