使用sed从输出中删除一些带点的数字

使用sed从输出中删除一些带点的数字,sed,Sed,我有以下输出: 1024x768 75.0 70.1 60.0 我怎么能把它改成只打印 1024x768 ? 顺便问一下,任何人都可以为Sed提供一些文档?我需要学习如何使用它。从空格开始去掉所有内容 使用POSIX字符类使用sed去除空格后的所有内容。例如: $ echo '1024x768 75.0 70.1 60.0' | sed 's/[[:space:]]\+.*//' 1024x768 $ echo '1024x768

我有以下输出:

1024x768       75.0     70.1     60.0
我怎么能把它改成只打印

1024x768
?

顺便问一下,任何人都可以为Sed提供一些文档?我需要学习如何使用它。

从空格开始去掉所有内容 使用POSIX字符类使用sed去除空格后的所有内容。例如:

$ echo '1024x768       75.0     70.1     60.0' | sed 's/[[:space:]]\+.*//'
1024x768
$ echo '1024x768       75.0     70.1     60.0' | awk '{print $1}'
1024x768
改用Awk 虽然可以使用sed,但在awk中解决这个问题要好得多,因为它的本机字段拆分。例如:

$ echo '1024x768       75.0     70.1     60.0' | sed 's/[[:space:]]\+.*//'
1024x768
$ echo '1024x768       75.0     70.1     60.0' | awk '{print $1}'
1024x768

你可以用电脑处理你的线路

sed 's/\s.*$//'
“在第一个空格后查找所有内容并替换为零”

正如评论中所指出的,“
\s
速记在
sed
的所有版本中都不起作用,$符号是多余的;您可以使用
sed的/[\t].//
来更普遍地应用。“查找第一个选项卡或空格后的所有内容,并将其删除”

当然,我在猜测你想要剥去的字符串的“一般情况”。。。你的问题似乎暗示你想删除所有带点的数字,这将是一个不同的表达,如下所示:

sed 's/[0-9]+\.[0-9]+//g'
将以数字0到9的任意组合开始的测试块,后跟一个点,后跟另一组至少有一个数字的测试块替换为空

有关良好的sed文档,请参阅


在本例中,
awk
可能是更好的工具(请参见codegnome的答案)

当我需要从文本中提取字符串时,
grep
首先出现:

grep -o '^[^ ]*'
使用您的数据:

kent$  echo "1024x768       75.0     70.1     60.0"|grep -o '^[^ ]*'
1024x768
这可能适用于您(GNU-sed):

这将删除所有十进制数字和周围的空白。如果行中没有保留任何内容,它也会删除空行


查看大量sed材料。

这是我的第一个想法,但OP确实要求使用
sed
。。。我很矛盾地给出了我认为是“错误”的答案,所以感谢你提供了另一种选择。在你编辑后,你的答案值得投票。但是为什么在
+
符号前有反斜杠?@Floris与一些sed一起使用,除非您使用
--regexp extended
,否则您需要转义
+
,将其用作匹配表达式而不是文字字符。感谢您的澄清。我想我被我使用的版本宠坏了。。。需要意识到“对方是如何SED的”。符号
+
是无用的,后面跟着
*
,无论是否有其他空间。因此
s/[[:space:].$/
将受到影响(或
s/\s.*$/
;-)。您不需要使用美元符号锚定表达式,因为
.*
是贪婪的。此外,并非所有版本的sed都支持PCRE兼容的
\s
符号。