在文本文件中删除单个字符行

4

我有一个包含大约800万行的文本文件。我需要删除所有只有一个字符的行。例如:

This is 
the 
text file 
I 
wrote

我想删除包含代词"I"的整行。谁能够在Linux命令行上完成此操作将得到额外的奖励分数。
6个回答

10

这是一个尝试:

awk 'length>1' file

如果您不想删除空行(零个字符的行)

awk 'length!=1' file

如果您在行中有空格(不希望将其视为字符):

awk '{gsub(/[[:space:]]/,"")}length!=1' file

感谢您和 @pfnuesel 的快速回复。我选择了 awk 'length>1' file > newfile,它的表现非常出色! - aeupinhere

5

也可以做到这一点:

sed '/^.$/d' inputFile

将输出存储到新文件中:
sed '/^.$/d' inputFile > outputFile

或者进行文件内编辑:
sed -i '/^.$/d' inputFile

谢谢!我真的无法区分性能差异,所以我只是根据字母顺序选择工具。A在S之前 :) - aeupinhere
@AdamEstrada 今后,你应该选择为手头工作设计的工具。grep用于查找正则表达式并打印结果(基于ed命令G/RE/P命名),sed用于替换单行上的正则表达式(流编辑器),awk用于其他所有文本操作。 - Ed Morton
@EdMorton 我完全同意,并正在编制一张备忘单,以便将来帮助我。 - aeupinhere

3

你所需要的是:

grep '..' file

除非您也想保留空行,否则应该这样写:

grep -v '^.$' file

1
太简单了,棒极了! - smilyface

0

使用Shell完成

#! /usr/bin/bash

while read line
do
   if [[ "${#line}" != 1 ]]; then
       echo $line
   fi
done < file

0

bash

 while read -r line
 do 
     if [ ${#line} -gt 1 ] ;then    
        echo $line 
     fi
 done < file

0
如果您的系统上安装了Ruby
ruby -ne 'puts $_ if $_.chomp.length >1 ' file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接