例如,假设我有一个文件“运动员”,其中包含以下行
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