我认为标题说明了一切,我正在寻找一个单行来删除文件的行,其中特定字符(例如 /)出现超过 x 次 - 例如 5 次。
开始:
/Bo/byl/apointe
堆栈溢出
月亮/
预期结果:
/Bo/byl/apointe
月亮/
谢谢你的建议 !
您可以使用gsub
的功能awk
。gsub
返回成功替换的次数。因此,您可以使用它作为参考来识别特定字符的出现次数。
awk 'gsub(/\//,"&")<5' file
根据Ed Morton 的建议更新。
所有你需要的是:
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/
这可能对您有用(GNU sed):
sed 's|/|&|5;T;d' file
这会做:
sed -r '/(\/.*){5}\//d' file
我相信sed
这里就足够了。您需要调查//d
并提供正确的条件。当我有更好的想法时,我会尝试一些东西并更新,你也应该:)
一旦你发现sed -i /{blah}/d
在文件中更改它就足够了,但你可能想在没有的情况下运行它-i
并首先通过管道less
确认它正在做你认为它正在做的事情。