我有一个如下所示的文件
1.2.3.4.ask
sanma.nam.sam
c.d.b.test
我想从每一行中删除最后一个字段,分隔符是
.
并且字段的数量不是恒定的。任何人都可以帮助我
awk
或 sed
找出解决办法。我不能用 perl
这里。
最佳答案
这两个 sed
和 awk
解决方案的工作独立于字段的数量。
使用 sed
:
$ sed -r 's/(.*)\..*/\1/' file
1.2.3.4
sanma.nam
c.d.b
注:
-r
是扩展正则表达式的标志,它可能是 -E
所以请联系 man sed
.如果您的版本sed
没有这个标志,然后只是转义括号:sed 's/\(.*\)\..*/\1/' file
1.2.3.4
sanma.nam
c.d.b
sed
解决方案是进行贪婪匹配直到最后 .
并捕获它之前的所有内容,它仅用匹配的部分(n-1
字段)替换整行。使用 -i
选项,如果您希望将更改存储回文件。使用
awk
:$ awk 'BEGIN{FS=OFS="."}{NF--; print}' file
1.2.3.4
sanma.nam
c.d.b
awk
解决方案只是简单地打印 n-1
字段,将更改存储回文件使用重定向:$ awk 'BEGIN{FS=OFS="."}{NF--; print}' file > tmp && mv tmp file
关于shell - 显示除最后一个字段以外的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13857836/