如何更改和列出包含以下格式行的文件:XXX-XXX-XXX-XXX-XXX

如何更改和列出包含以下格式行的文件:XXX-XXX-XXX-XXX-XXX

例如,假设我有一个文件“运动员”,其中包含以下行

1995-05-30-John-Smith 
1992-John-30-Smith-10 

如何列出以“Smith”结尾的行的前 2 个单词和最后一个单词,同时将格式更改为 #:

所以输出将是:

1995#05#Smith

答案1

你可以awk这样使用:

awk -F'-' '/Smith$/{print $1"#"$2"#"$NF}' athletes

它将给出输出:

1995#05#Smith

这里 awk 将搜索以 结尾的行Smith,并将打印第一个、第二个和最后一个字段#,它们之间带有 , 。

使用sed

sed -En 's/([^-]*)-([^-]*).*Smith$/\1#\2#Smith/gp' file.txt

它将匹配直到前两个-发生,然后在修改后仅打印匹配的行。

答案2

你可以试试这个:

grep "Smith$" file | tr "-" "#" | cut -d'#' -f1,2,5

输出:

1995#05#Smith

答案3

我们也可以通过下面的简单命令来完成

 awk -F "-" '/Smith$/&&OFS="#"{print $1,$2,$NF}' file

输出

1995#05#Smith

相关内容