查找和删除小于X字符的行长

use*_*418 -2 perl

我有一个文件中的项目列表,

foobar
barfoo
bar
faaboo
foo
boofar
fo
b
Run Code Online (Sandbox Code Playgroud)

使用perl,我只是在脚本之后将通过文件名并删除3个字符或更少的所有项目.覆盖现有文件名(不创建新的或临时文件名),因此列表将成为.

foobar
barfoo
faaboo
boofar
Run Code Online (Sandbox Code Playgroud)

DVK*_*DVK 8

一内胆:

perl -ine '{print if /.{4}/}' filename
Run Code Online (Sandbox Code Playgroud)

length正如Jonathan Leffler在评论中指出的那样,你可以使用(为换行符添加1)而不是正则表达式,这可能在非常大的文件上更快.这是一个Windows版本(注意使用双引号cmd代替单引号):

perl.exe -i.bak -n -e "{print if length > 4}" filename
Run Code Online (Sandbox Code Playgroud)

另外,为了回答您的评论,遗憾的是,如果-i没有备份文件,您无法在Windows上执行就地编辑.请参阅此SO帖子以获取详细说明(同样,Windows限制,而不是Perl)以及解决方法.

  • @user你应该对你的操作系统足够熟悉,虽然标准的Unix shell对于这个上下文中的单引号非常满意,但使用`cmd.exe`,你必须使用双引号,如:`perl -i. bak -ne"{print if /.{4}/}"filename` (2认同)
  • @ user349418 - 需要它.我用链接更新了答案,以完成解释以及实际的Windows命令 (2认同)