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

时间:2016-07-28 12:15:02

标签: linux unix awk sed grep

我需要搜索以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

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:1)

sed;

sed  -e 's/999\+$//' data.txt