搜索以特定模式结尾的列,然后删除该列

问题描述 投票:0回答:3

我需要搜索以999结尾的任何列的数字行,然后删除整个列,同时保留任何前导数字(即8599999 .... - > 85)

数据线:

66 72 79 84 87 90 91 92 92 93 92 91 89 85999999999999999999999999999999999

期望的输出:

66 72 79 84 87 90 91 92 92 93 92 91 89 85
linux unix awk sed grep
3个回答
3
投票

使用sed

$ s='66 72 79 84 87 90 91 92 92 93 92 91 89 85999999999999999999999999999999999'

$ # POSIX sed
$ echo "$s" | sed 's/999\{1,\}//g'
66 72 79 84 87 90 91 92 92 93 92 91 89 85

$ # sed with ERE support
$ echo "$s" | sed -E 's/999+//g'
66 72 79 84 87 90 91 92 92 93 92 91 89 85

$ # with GNU sed
$ echo "$s" | sed 's/999\+//g'
66 72 79 84 87 90 91 92 92 93 92 91 89 85

这将删除所有出现的99,然后是行中任何位置的一个或多个9

另见:Reference - What does this regex mean?


1
投票

在AWK中:

awk '{gsub(/999+$/,"")}1' test.in

让我们来看看:

$ cat > test.in
1 2 3
4 5 69999999
$ awk '{gsub(/999+$/,"")}1' test.in
1 2 3
4 5 6

1
投票

sed;

sed  -e 's/999\+$//' data.txt
© www.soinside.com 2019 - 2024. All rights reserved.