2016-04-25 15 views
-1

我怎麼能管串並掉落幾個字符關閉它?如子:管出通過移除最後N個字符

$ echo forbes | ... -3 
for 
$ echo cucumber | ... -4 
cucu 
$ echo 1461624333 | .. -3 
1461624 
... 
etc. 

我找不到辦法使用${str:0:-3}語法管道。

回答

1

使用cut

$ echo "forbes" | cut -b 1-3 
for 

更新:

從後面刮鬍子,你可以這樣做:

echo "forbes" | rev | cut -c (n+1)- | rev 

其中n是你想從結束

echo "forbes" | rev | cut -c 4- | rev 
for 
+0

它總是返回前3個字符, '回聲袋鼠| cut -b 1-3' – Agzam

+0

這就是'-b 1-3'應該告訴'cut'。你從1開始,並告訴你想要多少個字符。 –

+2

就是這樣 - 我不知道字符串中有多少個字符,我需要最後刪除3個 – Agzam

5

刮鬍子的字符數配管sed:

$ echo forbes | sed 's/...$//' 
for 

這匹配字符串的最後三個字符並將其刪除(用空字符串替換)。

爲了參數化的字符數,以除去,就可以在一個小的功能包此:

pipesubstr() { 
    sed "s/.\{$1\}$//" 
} 

如下使用:

$ echo forbes | pipesubstr 3 
for 
$ echo cucumber | pipesubstr 4 
cucu 
$ echo 1461624333 | pipesubstr 3 
1461624 
+0

這似乎工作!大。謝謝! – Agzam

2

GNU head是另一種選擇(去掉最後n字符來自輸入字符串作爲整體 - 即使它跨越多行):

$ printf '1461624333' | head -c -3 # drop last 3 chars. 
1461624 

請注意,如果您使用echo代替printf,有一個尾隨\n必須考慮到,所以你必須添加1到計數(和輸出不會有拖尾\n)。

警告:head -c運行在字節,因此只能用ASCII字符和其他單字節編碼工作。

0

一種awk溶液(除去在所述輸入的最後字符n每一行):

$ echo '1461624333' | awk -v n=3 '{ print substr($0, 1, length($0)-n) }' # drop last 3 
1461624 

警告:並非所有awk實現是區域識別;例如,在OS X 10.11.4上找到的BSD awk不是:

$ echo 'usä' | awk -v n=1 '{ print substr($0, 1, length($0)-n) }' 
us? # !! on OSX, mistakenly returns the first byte of multi-byte UTF8 char. 'ä' 
相關問題