如何使用sed显示记录的特定列

Sar*_*ara 4 linux sed

我有一个这样的清单:

5678:robert dylan   :d.g.m. :marketing  :04/19/43 85000
Run Code Online (Sandbox Code Playgroud)

我只想显示此人的姓名和名称。我想用sed它。我该怎么做?

Lev*_*von 8

更新

echo "5678:robert dylan :d.g.m. :marketing :04/19/43 85000" | 
sed 's/:/\n/g' | sed '1d;3d;$d'| sed 'N;s/\n/ - /'
Run Code Online (Sandbox Code Playgroud)

产量

robert dylan - marketing
Run Code Online (Sandbox Code Playgroud)

解释:

工作原理是将行拆分为基于 的多行:,删除第一行、第三行和最后一行,然后再次将它们连接起来。

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


以前的 AWK 解决方案

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

$ echo "5678:robert dylan :d.g.m. :marketing :04/19/43 85000" | awk -F":" '{print $2, $4}'
Run Code Online (Sandbox Code Playgroud)

产量

robert dylan  marketing
Run Code Online (Sandbox Code Playgroud)

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

awk -F":" '{print $2, $4}' data.txt
Run Code Online (Sandbox Code Playgroud)

将产生相同的输出。

awk非常适合此类任务。

说明

awk -F":" '{print $2, $4}'
Run Code Online (Sandbox Code Playgroud)

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


Mik*_*obe 6

只是想我会使用解决方案 cut

 cut -d ":" -f 2,4
Run Code Online (Sandbox Code Playgroud)

产生:

 robert dylan :marketing
Run Code Online (Sandbox Code Playgroud)