我正在尝试制作这个过滤来自ps的行的脚本.. 它几乎完成的脚本,只缺少这一行。
例如,这是我需要过滤的一行:
803 ? (many spaces here) 00:00:00 atd
我需要这样看起来像这样:
803 atd
我已经尝试了所有的东西,但似乎一个简单的sed参数不能这样做..如果sed检测到必须被删除的东西,它会删除它后面的整行。 如果我错了,请纠正我,谢谢你的时间..
答案 0 :(得分:5)
好像您正在寻找awk
。
awk '{print $1 " " $NF}'
打印每个输入行的第1个字段和最后一个字段。 NF
实际上是一些字段。
$> echo "803 ? (many spaces here) 00:00:00 atd" | awk '{print $1 " " $NF}'
803 atd
答案 1 :(得分:2)
实际上,你可以用perl或awk更轻松地做到这一点,......
perl -ane 'print "$F[0] $F[-1]\n"' # first and last field
awk '{print $1 " " $6}' # first and sixth field
答案 2 :(得分:2)
对sed:
尝试此命令sed 's/ .* / /'
尽可能采用第一个空格,然后是最后一个空格,并用一个空格替换它们。
如果你可以在字符串的开头或结尾有空格,那么你需要更加小心你的sed命令。它在这里并不那么优雅:
sed 's/^ *\([^ ]\+\).* *\([^ ]\+\) *$/\1 \2/'
这会捕获非空格字符并将它们放在输出流中。如果没有像GNU sed这样的扩展sed,则需要将[^ ]\+
的出现位替换为[^ ][^ ]*
。
话虽如此,awk
显然是这项工作最优雅的工具。