修改文本文件

修改文本文件

如何从文本文件中删除超过特定字母和字符数的行?

例如:在此文本文件中:

         a;dskjshdkjhgsdlhb5451candsncas;ldjch;sdkjncl
         zdkcjsd#c
         adsaskad@#s;l35684ad;sjdikm;
         ;okjilh@j
         oieoigsb53454kdsjhcyavscjbkajlknscm;la,

如何自动删除(使用命令行)仅包含 8 个字母和字符的所有行?我问这个问题是因为我有一种文本文件,我只想删除其中包含 8 个(字母和字符)的行(它是所有文件之间的相似行,并且具有相同的字母和字符)。

答案1

尝试

awk 'length($0) == 8 ' old_file > new_file

使用 -== 8!= 8表示等于,不等于。

答案2

grep -vEx '.{8}'

或者:

awk 'length != 8'

如果您的输入包含不形成有效字符的字节序列(例如,在处理使用错误编码的文件时,典型的 UTF-8 语言环境中的 0xe9 字节),请注意潜在的问题。

对于 GNU awk,这些字节加起来不会等于 所返回的值length。对于 GNU grep,包含此类字节序列的那些行将不匹配,.{8}因此这些行将被返回(因为-v),否则您将得到一个二进制文件(标准输入)匹配信息。使用 GNU 时您也会遇到类似的问题sed

答案3

尝试使用sed,.匹配任何字符\{8\}告诉它精确匹配其中的 8 个。表示^从行首开始匹配,$表示匹配到行尾,d表示删除该行。

 sed '/^.\{8\}$/d' file > newfile

或者如果您想更改现有文件,请使用 GNU sed

 sed -i '/^.\{8\}$/d' file 

如果您还想删除空行,则-e允许您在同一命令中放置多个表达式

sed -i -e '/^.\{8\}$/d' -e '/^$/d'

相关内容