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

时间:2013-03-02 23:42:46

标签: sed

我有这个输出:

1024x768       75.0     70.1     60.0

如何将其发送至仅打印

1024x768

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

4 个答案:

答案 0 :(得分:2)

剥离以空白开头的所有内容

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

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

使用Awk而不是

虽然你可以使用sed,但是因为它的原生字段分割,awk中的问题要好得多。例如:

$ echo '1024x768       75.0     70.1     60.0' | awk '{print $1}'
1024x768

答案 1 :(得分: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的回答)

答案 2 :(得分:0)

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

grep -o '^[^ ]*'

包含您的数据:

kent$  echo "1024x768       75.0     70.1     60.0"|grep -o '^[^ ]*'
1024x768

答案 3 :(得分:0)

这可能适合你(GNU sed):

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

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

有关丰富的sed资料,请参阅here