使用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
符号。