使用shell脚本在字符串中剪切最后n个字符

时间:2013-01-15 13:06:10

标签: bash shell cut

如何使用shell脚本删除特定字符串中的所有n个字符

ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,

输出将采用以下格式

ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188

4 个答案:

答案 0 :(得分:40)

要使用指定剪切字符串中的最后n个字符来回答问题的标题,可以使用Bash中的子字符串提取功能。

me@home$ A="123456"
me@home$ echo ${A:0:-2}  # remove last 2 chars
1234

但是,根据您的示例,您似乎想要删除所有尾随逗号,在这种情况下,您可以使用sed 's/,*$//'

me@home$ echo "ssl01:49188,ssl999999:49188,,,,," | sed 's/,*$//'
ssl01:49188,ssl999999:49188

或者,对于纯粹的Bash解决方案,您可以使用子字符串删除:

me@home$ X="ssl01:49188,ssl999999:49188,,,,,"
me@home$ shopt -s extglob
me@home$ echo ${X%%+(,)}
ssl01:49188,ssl999999:49188

如果转换需要应用于整个文件,我会使用sed方法,如果目标字符串已经存在于bash变量中,则使用bash子串删除方法。

答案 1 :(得分:11)

使用sed

sed 's/,\+$//' file

答案 2 :(得分:1)

我想你需要删除那些不必要的,

sed 's/,,//g;s/\,$//g' your_file

测试:

> cat temp
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,
> sed 's/,,//g;s/\,$//g' temp
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188
> 

答案 3 :(得分:1)

使用sed:

sed 's/,,*$//g' file