从字符串中删除最后 2 个字符
Removing 2 last characters from a string
我正在尝试从两个来源创建目录列表。另一个目录的条目后面可以有 -1 或 -2,我想去掉它们。
ls 输出示例:
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
非常完美!
如果您只想删除任何字符串的最后 2 位数字,请使用:
$ echo -e "Hello-1\nHello-2" | sed 's/..$//'
Hello
Hello
如果您想始终删除最后两个字符:
echo "abcdefg" | sed 's/..$//g'
> abcde
或者您可以对所有数字使用更严格的正则表达式
echo "abcdefg-2" | sed 's/-[[:digit:]]$//g'
> abcdefg
或者只有这两个:
echo "abcdefg-2" | sed 's/-[12]$//g'
> abcdefg
因为你已经将你的字符串存储在一个变量中,你可以使用bash的内置方式来处理它:
kent$ x="1234567"
kent$ echo ${x: :-2}
12345
使用参数扩展:
toto="abcd-1"
echo ${toto/%-[12]}
我正在尝试从两个来源创建目录列表。另一个目录的条目后面可以有 -1 或 -2,我想去掉它们。
ls 输出示例:
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
非常完美!
如果您只想删除任何字符串的最后 2 位数字,请使用:
$ echo -e "Hello-1\nHello-2" | sed 's/..$//'
Hello
Hello
如果您想始终删除最后两个字符:
echo "abcdefg" | sed 's/..$//g'
> abcde
或者您可以对所有数字使用更严格的正则表达式
echo "abcdefg-2" | sed 's/-[[:digit:]]$//g'
> abcdefg
或者只有这两个:
echo "abcdefg-2" | sed 's/-[12]$//g'
> abcdefg
因为你已经将你的字符串存储在一个变量中,你可以使用bash的内置方式来处理它:
kent$ x="1234567"
kent$ echo ${x: :-2}
12345
使用参数扩展:
toto="abcd-1"
echo ${toto/%-[12]}