首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除包含某些字符串或字符的字段?

如何删除包含某些字符串或字符的字段?
EN

Stack Overflow用户
提问于 2015-04-11 01:30:28
回答 5查看 206关注 0票数 1

我有一个包含以下内容的.txt文件

代码语言:javascript
复制
Name: Dean AGE: 23 Hometown: Chicago
Name: Mary AGE: 68 hometown: New York
Name: Lisa age: 36 Hometown: Los angeles
Name: Greg Age: 18 hometown: London

如何使用sed、awk或tr "Name:“、"Age:”和"Hometown:“,因此结果是:

代码语言:javascript
复制
Dean 23 Chicago
Mary 68 New York
Lisa 36 Los angeles
Greg 18 London

我唯一能想到的就是遍历所有字段并打印出来,如下所示:

代码语言:javascript
复制
awk '{for (i=1;i<=NF;i++) {if ($i !~/:/) {print i,$i}}}'

然而,这给了我一个结果:

代码语言:javascript
复制
Dean 
23 
Chicago
Mary 
68 
New 
York
Lisa 
36 
Los 
angeles
Greg 
18 
London

正如您所看到的,它在自己的行上打印出每个字段,并将纽约和纽约以及洛杉矶和洛杉矶分开。

我的另一个想法是一个接一个地输入"Name:“、"Age:”和"Hometown:“,所有这些命令都用不同的命令来替换它们,这是可行的。例如:

代码语言:javascript
复制
sed 's/Name://g'

但是,有没有办法使它不区分大小写,比如"age:“、"Age:”和"AGE:“

EN

回答 5

Stack Overflow用户

发布于 2015-04-11 01:39:35

如果您有GNU,它有一个用于不区分大小写的匹配的选项I

代码语言:javascript
复制
sed 's/Name://gI;s/Age://gI;s/Hometown://gI' file

稍作更改,awk解决方案就可以工作了:

代码语言:javascript
复制
awk '{ for(i=1;i<=NF;i++) {if ($i ~/:/) {$i=""}} ; print }' file
票数 4
EN

Stack Overflow用户

发布于 2015-04-11 01:58:21

代码语言:javascript
复制
$ awk -F' ?[^ ]+: ' '{print $2, $3, $4}' file
Dean 23 Chicago
Mary 68 New York
Lisa 36 Los angeles
Greg 18 London

或者一般用于任意数量的字段:

代码语言:javascript
复制
$ awk -F' ?[^ ]+: ' '{for (i=2;i<=NF;i++) printf "%s%s", $i, (i<NF?OFS:ORS)}' file
Dean 23 Chicago
Mary 68 New York
Lisa 36 Los angeles
Greg 18 London
票数 4
EN

Stack Overflow用户

发布于 2015-04-11 01:50:19

您还可以使用此gnu-awk命令:

代码语言:javascript
复制
awk -v IGNORECASE=1 -v OFS='\t' -F ' *(Name|AGE|Hometown): *' ' {
      printf $2; for (i=3; i<=NF; i++) printf OFS $i; print ""}' file
Dean    23    Chicago
Mary    68    New York
Lisa    36    Los angeles
Greg    18    London
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29567373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档