2009-06-23 75 views

回答

34

如果字符串被存储在一个变量名为$海峡,那么这将让你给你的子,而不在bash的最后20位

${str:0:${#str} - 20} 

基本上,串切片可以做到用

${[variableName]:[startIndex]:[length]} 

和字符串的长度是

${#[variableName]} 

编辑: 解决方案使用的sed,关于文件的工作原理:

sed 's/.\{20\}$//' < inputFile 
+4

`$ {STR :: - 20}}`就足够了。 – 2013-06-26 16:02:28

1

在猛砸${parameter/pattern/string}语法,模式是路径通配符风格的模式,而不是一个正则表达式。在通配符语法点.只是一个字面点和大括号用于匹配选项的选择(如在正则表达式的管|),因此该行会简单地删除文本字符串".20"

+0

感谢您的解释,但似乎只有一个答案可以接受,不好意思:) – jaimechen 2009-11-08 07:57:55

1

有几种方式来完成的基本任务。

$ str="qa_sharutils-2009-04-22-15-20-39" 

如果你想剥去最后20个字符。此子选择是基于零:

$ echo ${str::${#str}-20} 
qa_sharutils 

的“%”和“%%”从字符串的右手侧剥离。举例来说,如果你想跟随第一基名,减什么“ - ”:

$ echo ${str%%-*} 
qa_sharutils 
+2

`回声“$ {海峡:: - 20}”`就​​足够了。 – 2013-06-26 16:02:00

0

只有当你的最后20个字节总是最新的。

$ str="qa_sharutils-2009-04-22-15-20-39" 
$ IFS="-" 
$ set -- $str 
$ echo $1 
qa_sharutils 
$ unset IFS 

或者当不需要第一次冲刺和超越时。

$ echo ${str%%-*} 
qa_sharutils 
2

使用AWK:

echo $str | awk '{print substr($0,1,length($0)-20)}' 

或使用字符串操作 - 回波$ {字符串:位置:长度}:

echo ${str:0:$((${#str}-20))} 
+1

`echo“$ {str :: - 20}”`就​​足够了。 – 2013-06-26 16:01:41

1

类似于SUBSTR( 'ABCDEFG',2-1 3)在PHP中:

echo 'abcdefg'|tail -c +2|head -c 3 
相关问题