从字符串中删除最后2个字符

时间:2015-10-22 14:37:26

标签: bash sed ls

我试图从两个来源制作目录列表。另一个目录中的条目可以包含-1或-2,我想摆脱它们。

输出示例:

something.something.anything-1
stuff.stuff.stuff.morestuff-2
st.uf.f

我现在的代码:

echo -e "\tDATA\t\t | \t\tSYSTEM"
for SYSTEM in `ls /system/app`; do
    for DATA in `ls /data/app | sed 's/-1*$//' | sed 's/-2*$//'`; do
        echo -n "$DATA | " 
    done
    echo "$SYSTEM"
done

它的效果很好,但是如果有更好的方法,我会很蠢,因为我必须使用sed两次。我注意到这里没有很多好帖子可以使用命令从字符串中删除字符,这可能是分享你的想法的好地方。

更新

更新的代码:

echo -e "\tDATA\t\t | \t\tSYSTEM"
for SYSTEM in `ls /system/app`; do
    for DATA in `ls /data/app | sed 's/-[[:digit:]]*$//'`; do
        echo -n "$DATA | " 
    done
    echo "$SYSTEM"
done

完美无缺!

4 个答案:

答案 0 :(得分:2)

如果你想要删除最后两个字符:

echo "abcdefg" | sed 's/..$//g'
> abcde

或者您可以对所有数字使用更严格的正则表达式

echo "abcdefg-2" | sed 's/-[[:digit:]]$//g'
> abcdefg

或者只是那两个:

echo "abcdefg-2" | sed 's/-[12]$//g'
> abcdefg

答案 1 :(得分:1)

由于您已将字符串存储在变量中,因此您可以使用bash的内置方式来处理它:

kent$  x="1234567"    
kent$  echo ${x: :-2}
12345

答案 2 :(得分:0)

如果您只想删除任何字符串的最后两位数字,请使用:

$ echo -e "Hello-1\nHello-2" | sed 's/..$//'
Hello
Hello

答案 3 :(得分:0)

使用参数扩展:

\p{L}