我正在寻找一种删除所有不遵循特定模式的行的方法(从txt文件中删除)。
我需要保留行的模式:
x//x/x/x/5/x/
x
可以是任意数量的字符,数字或特殊字符。
5
始终是字母数字-5个字符的组合-例如Xf1Lh,总是出现在第5个正斜杠之后。
/
是实际的正斜杠。
输入:
abc//a/123/gds:/4AdFg/f3dsg34/ y35sdf//x/gd:df/j5je:/x/x/x yh//x/x/x/5Fsaf/x/ 45wuhrt//x/x/dsfhsdfs54uhb/ 5ehys//srt/fd/ab/cde/fg/x/x
所需的输出:
abc//a/123/gds:/4AdFg/f3dsg34/ yh//x/x/x/5Fsaf/x/
grep
根据正则表达式选择行,您x//x/x/x/5/x/
只需要稍作更改即可使其成为正则表达式:
$ grep -E '.*//.*/.*/.*/[[:alnum:]]{5}/.*/' file
abc//a/123/gds:/4AdFg/f3dsg34/
yh//x/x/x/5Fsaf/x/
解释:
“ x可以是任意数量的字符,数字或特殊字符”。在正则表达式中,.*
where.
表示任何字符,并且*
表示零个或多个前一个字符(在这种情况下为.
)。
“ 5始终是字母数字-5个字符的组合”。在POSIX正则表达式中,[[:alnum:]]
表示任何字母数字字符。{5}
表示前五个。[[:alnum:]]
是Unicode安全的。
一个问题是x
应该如何解释。在上面,x
被允许为任何字符。但是,正如三联指出的那样,另一个合理的解释是,除了之外,x
任何字符都 应该是/
。在这种情况下:
grep -E '[^/]*//[^/]*/[^/]*/[^/]*/[[:alnum:]]{5}/[^/]*/' file
另外,我们可能希望此正则表达式仅匹配完整的行。在这种情况下,我们可以围绕正则表达式与^
一个$
或者我们可以使用grep的-x
选项:
grep -xE '[^/]*//[^/]*/[^/]*/[^/]*/[[:alnum:]]{5}/[^/]*/' file
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句