我试图从两个来源制作目录列表。另一个目录中的条目可以包含-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
完美无缺!
答案 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}