在linux文件中只打印6个和10个字符

时间:2015-05-26 07:15:41

标签: linux awk sed

这是我的档案:

$cat filename  
10023a,vija45,8877au,qwer65,guru12 0099888das,baburam123,ganeshan1,feild55512

我尝试做的是使用sed below命令将输出设置为该文件中只有6个字符

sed  -ne 's/[a-z][0-9]\{6}/&/p' filename     

显示所有单词和行

你能不能请任何人帮助我......

预期输出

vija45           baburam123  
8877au           ganeshan1   
qwer65           feild55512  
guru12 

3 个答案:

答案 0 :(得分:1)

我建议您使用grep进行匹配。

grep -o '\b\w\{6\}\b' file

答案 1 :(得分:1)

使用:

tr "," "\n" <file | grep '^.\{6\}$\|^.\{10\}$'

首先tr用换行符替换所有,,我们在一行中的逗号之间有每个段。

然后grep搜索6或10个字符的长行并打印出来。

根据您给出的示例,输出将是:

10023a
vija45
8877au
qwer65
baburam123
feild55512

如果guru12 0099888das也必须匹配为6个字符和10个字符的单词,那么只需更改tr部分以包含空格:

tr ", " "\n" <file | grep '^.\{6\}$\|^.\{10\}$'

答案 2 :(得分:1)

sed '
# keep only 6 char word (and space) by removing less or more than 6 character word
 s/.*/,&,/
 s/[^[:space:],]\{11,\}//g;s/[[:space:],][^[:space:],][[:space:],]\{1,5\}/,/g;s/[[:space:],][^[:space:],][[:space:],]\{7,9\}/,/g
# clean space element
 s/[[:space:],]\{2,\}/,/g;s/^[[:space:],]*//g;s/[[:space:],]*$//g
# remove empty line
 /$[[:space:],]*$/d
# 1 word per line (optional)
 y/ ,/\n\n/
' YourFile

详情:

  • 打印所有6个字母的单词在行中找到(每个输出行打印1个字的选项)
  • 自我解释
  • 适用于,分开

更正:忘记一些g和一个小字删除的小错误,并添加10个字符(仅在第一个版本中取6)