我有一个有时
的字符串xxx.11_222_33_44_555.yyy
有时候
xxx.11_222_33_44.yyy
我想:
检查是否有4个_
的遮挡物(想出了怎么做)。
如果是这样 - 删除字符串的_33
(33
字符串更改,可以是任意数字),所以我留下了xxx.11_222_44.yyy
。
答案 0 :(得分:1)
使用sed:
sed 's/\(_[0-9]*\)_[0-9]*\(_[0-9]*_[0-9]*\)/\1\2/'
它匹配四个下划线,并用所需的部分替换整个。
试运行:
$ echo "xxx.11_222_33_44_555.yyy" | sed 's/\(_[0-9]*\)_[0-9]*\(_[0-9]*_[0-9]*\)/\1\2/'
xxx.11_222_44_555.yyy
$ echo "xxx.11_222_33_44.yyy" | sed 's/\(_[0-9]*\)_[0-9]*\(_[0-9]*_[0-9]*\)/\1\2/'
xxx.11_222_33_44.yyy
答案 1 :(得分:0)
也许是这样的
echo "xxx.11_222_33_44.yyy" | sed -e's/\.\([0-9]\+\)_\([0-9]\+\)_\([0-9]\+\)_\([0-9]\+\)\./.\1_\2_\4./'
检查两个点之间是否有4组由_
分隔的数字,如果是,则省略第三组
答案 2 :(得分:0)
试试这个;
echo "xxx.11_222_33_44_555.yyy" | awk -F'_' 'NF>4{print $1"_"$2"_"$4"_"$5};'
答案 3 :(得分:0)
使用perl
和Lookahead和Lookbehind
$ a="xxx.11_222_33_44_555.yyy"
$ perl -pe 's/\.\d+_\d+_\K\d+_(?=\d+_\d+\.)//' <<< "$a"
xxx.11_222_44_555.yyy