如何删除top(1)输出的每一行的第二个单词?

时间:2012-12-06 10:26:09

标签: unix sed

我有一个格式化的进程列表(顶部输出),我想删除不必要的信息。如何删除例如每行的第二个单词+空格。

示例:

1 a hello
2 b hi
3 c ahoi

我想删除b和c。

5 个答案:

答案 0 :(得分:10)

您可以使用cut命令。

 cut -d' ' -f2 --complement file

--complement做反过来。即选择了-f2第二个字段。如果打印除第二个以外的所有字段,则使用--complement。当您具有可变数量的字段时,这非常有用。

GNU的剪切具有选项--complement。如果--complement不可用,则以下内容相同:

cut -d'' - f1,3- file

含义:打印第一个字段,然后从第3个字段打印到结尾,即排除第二个字段并打印其余字段。 修改

如果您愿意awk,可以执行:awk {$2=""; print $0}' file

这会将第二个设置为空并打印整行(逐个)。

答案 1 :(得分:5)

使用sed替换第二列:

sed -r 's/(\w+\s+)\w+\s+(.*)/\1\2/' file 
1 hello
2 hi
3 ahoi

说明:

(\w+\s+) # Capture the first word and trailing whitespace
\w+\s+   # Match the second word and trailing whitespace
(.*)     # Capture everything else on the line

\1\2     # Replace with the captured groups 

注意:使用-i选项将结果保存回file-r用于扩展正则表达式,检查man可能是-E awk 1}}取决于实施。

或使用$ awk '{print $1, $3}' file 1 hello 2 hi 3 ahoi 仅打印指定的列:

awk

两种解决方案都有优点,awk '{print $1, $3}' file > tmp; mv tmp file解决方案适用于少量固定数量的列,但您需要使用临时文件将更改存储sed作为-i解决方案更灵活,因为列不是问题,{{1}}选项可以进行编辑。

答案 2 :(得分:3)

使用sed的一种方式:

sed 's/ [^ ]*//' file

结果:

1 hello
2 hi
3 ahoi

答案 3 :(得分:3)

使用Bash:

$ while read f1 f2 f3
> do
>  echo $f1 $f3
> done < file
1 hello
2 hi
3 ahoi

答案 4 :(得分:3)

这可能适合你(GNU sed):

sed -r 's/\S+\s+//2' file