如何编写 sed 脚本来删除一行中的数字?

如何编写 sed 脚本来删除一行中的数字?

样本文件

a.b.gg3d 0000000001 0000000001 y
a.b.112a 0000000000 0000000001 y
a.b.gg3s 0000000001 0000000001 y
a.b.1111 0000000000 0000000001 m

我有一个文件,其中包含大约三千行独特的行,类似于上面的示例。我想使用 sed 从每行中删除“xxxxxxxxx xxxxxxxxxx”数字。使用上面的示例,我希望 sed 脚本产生以下输出:

a.b.gg3d y
a.b.112a y
a.b.gg3s y
a.b.1111 m

我怎样才能做到这一点?是否有一串命令告诉 sed “删除第一个空格后的所有数字,但保留最后一个字符”?

答案1

给定此输入,您希望保留第一个和最后一个字段。使用 awk 非常简单:

awk '{print $1, $NF}' filename

使用 sed,这将替换所有空格分隔的仅数字单词:

sed ':a; s/ [[:digit:]]\+ / /; ta'

答案2

另一个仅使用 的解决方案cut,将打印第一列和第四列:

cut -d' ' -f1,4 < samplefile.txt

答案3

sed -e 's/[ ].*[ ]/ /' yourfile

这会查看最左边的空间,直到最右边的空间,并将其替换为单个空格。 IOW,保留第一个和最后一个字段。

假设没有前导和/或尾随空格。没有选项卡。

否则,我们总是可以执行以下操作:

SPC=`echo 'x' | tr 'x' '\040'`
TAB=`echo 'x' | tr 'x' '\011'`
WS="[$TAB$SPC]"
sed -e "s/^$WS*//;s/${WS}\$//;s/${WS}.*${WS}/${SPC}/" < yourfile

答案4

$ echo "a.b.gg3d 0000000001 0000000001 y" |sed -r 's/[ ]+[0-9]+//g'
a.b.gg3d y

-r 正则表达式模式

您正在搜索一个或多个空格,后跟 0-9 范围内的一个或多个数字。从技术上讲,这是匹配两次,在 abgg3d 和 y 之间留下第三个空格。

相关内容