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

ani*_*ish 13 bash shell cut

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

ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,
Run Code Online (Sandbox Code Playgroud)

输出将采用以下格式

ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188
Run Code Online (Sandbox Code Playgroud)

Sha*_*hin 40

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

me@home$ A="123456"
me@home$ echo ${A:0:-2}  # remove last 2 chars
1234
Run Code Online (Sandbox Code Playgroud)

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

me@home$ echo "ssl01:49188,ssl999999:49188,,,,," | sed 's/,*$//'
ssl01:49188,ssl999999:49188
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 对于旧版本:使用#item来获取字符串的长度,因此如果您尝试删除最后n个字符,请执行item ="abcdefgh"echo $ {item:0:$ {#item} -n}; (11认同)
  • 请注意,第一个解决方案仅适用于较新版本的Bash(> = 4.2-alpha). (6认同)