【发布时间】:2011-06-28 20:20:57
【问题描述】:
我以以下字符串为例: 前任。 "弃16 1.10 2.62 3.50"
我想将此结果通过管道传递给 sed 并删除所有十进制数字,以留给我以下内容: 前任。 《被遗弃的 16 岁》
我正在使用以下命令:sed 's/.//g' 这显然不起作用。
谁能告诉我如何使用通配符和 sed 来删除任何匹配“.”的内容。
谢谢
【问题讨论】:
我以以下字符串为例: 前任。 "弃16 1.10 2.62 3.50"
我想将此结果通过管道传递给 sed 并删除所有十进制数字,以留给我以下内容: 前任。 《被遗弃的 16 岁》
我正在使用以下命令:sed 's/.//g' 这显然不起作用。
谁能告诉我如何使用通配符和 sed 来删除任何匹配“.”的内容。
谢谢
【问题讨论】:
你还没有说你想用空格做什么,但是怎么样
sed -e 's/[0-9]*\.[0-9]*//g' -e 's/ *$//'
【讨论】:
awk 会更容易,至少对我来说是这样
echo "Abandoned 16 1.10 2.62 3.50" | awk '{print $1FS$2}'
但是之后的数字列表是随机的吗?
如果是这样,这也有效
echo "Abandoned 16 1.10 2.62 3.50" | sed -r 's/\s([0-9]+)\.([0-9]+)//g'
请注意\s 会捕获空格,并且小数点前后的数字会被保存,因此如果您想保留它们并对其进行处理,您可以分别使用\1 和\2 访问它们
为什么要抓住白色的sapce?想象一下,如果在您的示例中 16 出现在 3.50 之后,那么您将返回
Abandoned [5spaces*] 16
*我只能在这个<textarea>中插入一个空格
【讨论】:
awk '{print$1FS$2}' 应该从您给定的字符串中执行此操作。注意FS,它是字段分隔符,在本例中为空格。
引入一个 awk 解决方案,该解决方案循环输入并跳过其中包含句点的条目
{
printf("%s ", $1)
for(i=2;i<NF;i++) {
if ($i !~ /\./) {
printf( " %s ", $i)
}
}
}
$ echo Abandoned 16 1.10 2.62 3.50 | awk -f f.awk
Abandoned 16
【讨论】: