我有这个输出:
1024x768 75.0 70.1 60.0
我怎样才能让它只打印
1024x768
?
顺便说一句,任何人都可以为 Sed 提供一些文件吗?我需要学习如何使用它。
使用 POSIX 字符类通过 sed 去除空格之后的所有内容。例如:
$ echo '1024x768 75.0 70.1 60.0' | sed 's/[[:space:]]\+.*//'
1024x768
虽然您可以使用 sed,但由于 awk 的原生字段拆分,这个问题在 awk 中解决起来要好得多。例如:
$ echo '1024x768 75.0 70.1 60.0' | awk '{print $1}'
1024x768
您可以使用
sed 's/\s.*$//'
“查找第一个空格后的所有内容并替换为空”
正如评论中指出的那样,\s
速记不适用于所有版本的sed
,并且 $ 符号是多余的;你可以使用sed 's/[\t ].*//
更普遍适用。“查找第一个制表符或空格之后的所有内容,然后将其删除”。
当然,我猜测您要删除的字符串的“一般情况”...您的问题似乎暗示您想删除所有带有点的数字,这将是一个不同的表达式,如下所示:
sed 's/[0-9]+\.[0-9]+//g'
“替换以数字 0 到 9 的任意组合开头的测试块,然后是一个点,然后是另一组至少一个数字,没有任何内容”
有关良好的 sed 文档,请参阅http://www.grymoire.com/Unix/Sed.html
awk
在这种情况下可能是更好的工具(见codegnome的回答)
当我需要从文本中提取字符串时,grep
首先出现:
grep -o '^[^ ]*'
使用您的数据:
kent$ echo "1024x768 75.0 70.1 60.0"|grep -o '^[^ ]*'
1024x768
这可能对您有用(GNU sed):
sed -r 's/\s*([0-9]+)?\.[0-9]+\s*//g;/./!d' file
这将删除任何十进制数字和周围的空白。如果行中没有任何内容,它也会删除空行。
在这里查看丰富的 sed 材料。