3

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

开始:

/Bo/byl/apointe

堆栈溢出

月亮/

预期结果:

/Bo/byl/apointe

月亮/

谢谢你的建议 !

4

5 回答 5

5

您可以使用gsub的功能awkgsub返回成功替换的次数。因此,您可以使用它作为参考来识别特定字符的出现次数。

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

根据Ed Morton 的建议更新。

于 2013-06-07T01:25:55.953 回答
3

所有你需要的是:

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/
于 2013-06-07T13:40:43.943 回答
3

这可能对您有用(GNU sed):

sed 's|/|&|5;T;d' file
于 2013-06-07T05:51:12.940 回答
0

这会做:

sed -r '/(\/.*){5}\//d' file
于 2013-06-07T05:45:08.253 回答
0

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

一旦你发现sed -i /{blah}/d在文件中更改它就足够了,但你可能想在没有的情况下运行它-i并首先通过管道less确认它正在做你认为它正在做的事情。

于 2013-06-07T01:26:42.710 回答