微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用sed显示某个logging的某一列

我有这样一个列表:

5678:robert dylan :dgm :marketing :04/19/43 85000

我只想显示这个人的名字和指定。 我想用这个sed 。 我该怎么做?

线程局部variables和fs段

Oracle设置了认的NLS_LANG

如何使用yocto食谱给“configuration”选项?

如何在C和Linux中打印黑桃,红心,钻石等?

Linux内核中的FPU使用

更新

echo "5678:robert dylan :dgm :marketing :04/19/43 85000" | sed 's/:/n/g' | sed '1d;3d;$d'| sed 'N;s/n/ - /'

产量

robert dylan - marketing

说明:

按照以下方法将行分成几行:删除第一行,第三行和最后一行,然后再将它们连接起来。

注意 :在最后一个表达式中, 可以通过在'N;s/n/ /'的最后一个/ /

以前的AWK解决方案 :

不是sed ,但是如果awk是可接受的,那么awk就是一个非常自然的工具:

$ echo "5678:robert dylan :dgm :marketing :04/19/43 85000" | awk -F":" '{print $2,$4}'

产量

robert dylan marketing

或者,如果您的数据存储在名为data.txt的文件中:

awk -F":" '{print $2,$4}' data.txt

会产生相同的输出

awk非常适合这类任务。

说明 :

awk -F":" '{print $2,$4}'

-F将字段分隔符设置为: ,分别print $2,$4打印结果字段2和4。 您可以使用printf根据需要将输出格式化为特定格式。

这可能适合你:

echo "5678:robert dylan :dgm :marketing :04/19/43 85000" | sed 's/[^:]*:([^:]*:)[^:]*:([^:]*):.*/12/' robert dylan :marketing

说明:

替代命令的左侧(LHS)说:

[^:]*:匹配零个或多个非:后跟一个: – 匹配5678:

([^:]*:) ,但将被记忆为反向参考1 – 匹配robert dylan :

[^:]*:如上所述,但没有反向引用 – 匹配dgm :

([^:]*)如上所述(除了:但将被记忆为背景参考2 – 匹配marketing

:.* a :其他所有内容 – 匹配:04/19/43 85000

替代命令的右边说:

12将左侧替换为第一个和第二个后退参照。

只是以为我会在cut的解决方案下降

cut -d ":" -f 2,4

生产:

robert dylan :marketing

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐