样本文件
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 之间留下第三个空格。