例如qa_sharutils-2009-04-22-15-20-39
,想砍过去的20个字节,并获得“qa_sharutils
”。如何砍在bash字符串choping字符串的最后n个字节?
我知道该怎么做,在中美战略经济对话,但为什么$A=${A/.\{20\}$/}
不起作用?
谢谢!
例如qa_sharutils-2009-04-22-15-20-39
,想砍过去的20个字节,并获得“qa_sharutils
”。如何砍在bash字符串choping字符串的最后n个字节?
我知道该怎么做,在中美战略经济对话,但为什么$A=${A/.\{20\}$/}
不起作用?
谢谢!
如果字符串被存储在一个变量名为$海峡,那么这将让你给你的子,而不在bash的最后20位
${str:0:${#str} - 20}
基本上,串切片可以做到用
${[variableName]:[startIndex]:[length]}
和字符串的长度是
${#[variableName]}
编辑: 解决方案使用的sed,关于文件的工作原理:
sed 's/.\{20\}$//' < inputFile
在猛砸${parameter/pattern/string}
语法,模式是路径通配符风格的模式,而不是一个正则表达式。在通配符语法点.
只是一个字面点和大括号用于匹配选项的选择(如在正则表达式的管|
),因此该行会简单地删除文本字符串".20"
。
感谢您的解释,但似乎只有一个答案可以接受,不好意思:) – jaimechen 2009-11-08 07:57:55
有几种方式来完成的基本任务。
$ str="qa_sharutils-2009-04-22-15-20-39"
如果你想剥去最后20个字符。此子选择是基于零:
$ echo ${str::${#str}-20}
qa_sharutils
的“%”和“%%”从字符串的右手侧剥离。举例来说,如果你想跟随第一基名,减什么“ - ”:
$ echo ${str%%-*}
qa_sharutils
`回声“$ {海峡:: - 20}”`就足够了。 – 2013-06-26 16:02:00
只有当你的最后20个字节总是最新的。
$ str="qa_sharutils-2009-04-22-15-20-39"
$ IFS="-"
$ set -- $str
$ echo $1
qa_sharutils
$ unset IFS
或者当不需要第一次冲刺和超越时。
$ echo ${str%%-*}
qa_sharutils
使用AWK:
echo $str | awk '{print substr($0,1,length($0)-20)}'
或使用字符串操作 - 回波$ {字符串:位置:长度}:
echo ${str:0:$((${#str}-20))}
`echo“$ {str :: - 20}”`就足够了。 – 2013-06-26 16:01:41
类似于SUBSTR( 'ABCDEFG',2-1 3)在PHP中:
echo 'abcdefg'|tail -c +2|head -c 3
`$ {STR :: - 20}}`就足够了。 – 2013-06-26 16:02:28