我创建了以下bash管道,它将获取“who”的输出并修改它以满足作业的要求
这是pipline:
who | sed -e "s/\b\(.\)/\u\1/g" | sed 's/[.]/ /g' | sed 's/ Pts\// TTY /g' | sed '1d' | sed -n 's/ .*$/ /gp'
将其放入一个如下所示的sed文件中:
s/\b\(.\)/\u\1/g
s/[.]/ /g
s/ Pts\// TTY /g
1d
s/ .*$/ /gp
然后像这样运行它:
who | sed -f sedfile
输出正确,因为所有内容的格式为:
firstName lastName TTY (a number)
然而,每行打印两次,管道正确打印每行
有人会碰巧知道这个问题吗?
答案 0 :(得分:1)
这是最后一行的gp。您没有使用sed -n(无打印)运行,因此默认情况下您使用sed -yesprint(或其他)运行。然后你点击那个打印的gp,你得到两个副本。
转换为sed -n
,或将gp
更改为g
。或者更好的是,摆脱它,因为匹配模式包含$,所以它只会在一个地方运行 - 行的结尾。