![删除每个 . after ] 出现在完整文本文件的一行中](https://linux22.com/image/54325/%E5%88%A0%E9%99%A4%E6%AF%8F%E4%B8%AA%20.%20after%20%5D%20%E5%87%BA%E7%8E%B0%E5%9C%A8%E5%AE%8C%E6%95%B4%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E7%9A%84%E4%B8%80%E8%A1%8C%E4%B8%AD.png)
我有一个文件,需要删除其中的 .每行的 ] 之后
例如
xyz[1.2]35.23
xyz[1.2.3]35.234
输出应该是
xyz[1.2]3523
xyz[1.2.3]35234
答案1
要删除最右边的点之后的点]
:
sed -e :1 -e 's/\(][^]]*\)\.\([^]]*\)$/\1\2/;t1'
或者:
awk -F']' -vOFS=']' 'NF>1 {gsub(/\./,"",$NF)};1'
或者:
perl -pe 's/.*\]\K.*/$&=~s|\.||gr/e'
删除后]
不管]
右边是否有其他。
sed -e :1 -e 's/\(].*\)\./\1/;t1'
或者:
perl -pe 's/.*?\]\K.*/$&=~s|\.||gr/e'
答案2
和perl
:
$ perl -pe 's/(?<=])\d+\K\.//g' file
xyz[1.2]3523
xyz[1.2.3]35234