首页 > 解决方案 > 在 Linux 上使用 sed/awk 或任何其他方式使用模式进行文本过滤

问题描述

输入(非特定大小)

w23r.abc:eg-1/23-we34.abc:eg-2/43 we4r.abc:eg-2/25-w5wr.abc:eg-1/63 wewr.abc:eg-6/23-45wr.abc:eg-3/24 

期望的输出

w23r.abc:eg-1/23
we4r.abc:eg-2/25
wewr.abc:eg-6/23

如何在 Linux 上使用 sed/awk 或其他文本编辑工具实现上述目标?

echo w23r.abc:eg-1/23-we34.abc:eg-2/43 we4r.abc:eg-2/25-w5wr.abc:eg-1/63 wewr.abc:eg-6/23-45wr.abc:eg-3/24 | tr ' ' '\n' | cut -d- -f3-
we34.abc:eg-2/43
w5wr.abc:eg-1/63
45wr.abc:eg-3/24

标签: awksed

解决方案


使用 GNU awk:

awk '{print $1,$2}' FS='-' RS=' ' OFS='-' file

FS: 输入字段分隔符

RS: 输入记录分隔符,默认换行

OFS:输出字段分隔符

输出:

w23r.abc:eg-1/23
we4r.abc:eg-2/25
wewr.abc:eg-6/23

请参阅:8 个强大的 Awk 内置变量——FS、OFS、RS、ORS、NR、NF、FILENAME、FNR


推荐阅读