2009-06-23 42 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 
相關問題