0

我有这个输出:

1024x768       75.0     70.1     60.0

我怎样才能让它只打印

1024x768

?

顺便说一句,任何人都可以为 Sed 提供一些文件吗?我需要学习如何使用它。

4

4 回答 4

2

删除以空格开头的所有内容

使用 POSIX 字符类通过 sed 去除空格之后的所有内容。例如:

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

改用 awk

虽然您可以使用 sed,但由于 awk 的原生字段拆分,这个问题在 awk 中解决起来要好得多。例如:

$ echo '1024x768       75.0     70.1     60.0' | awk '{print $1}'
1024x768
于 2013-03-02T23:47:42.070 回答
0

您可以使用

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的回答)

于 2013-03-02T23:49:18.707 回答
0

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

grep -o '^[^ ]*'

使用您的数据:

kent$  echo "1024x768       75.0     70.1     60.0"|grep -o '^[^ ]*'
1024x768
于 2013-03-02T23:54:00.420 回答
0

这可能对您有用(GNU sed):

sed -r 's/\s*([0-9]+)?\.[0-9]+\s*//g;/./!d' file

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

在这里查看丰富的 sed 材料。

于 2013-03-03T00:55:24.170 回答