我怎麼能管串並掉落幾個字符關閉它?如子:管出通過移除最後N個字符
$ echo forbes | ... -3
for
$ echo cucumber | ... -4
cucu
$ echo 1461624333 | .. -3
1461624
...
etc.
我找不到辦法使用${str:0:-3}
語法管道。
我怎麼能管串並掉落幾個字符關閉它?如子:管出通過移除最後N個字符
$ echo forbes | ... -3
for
$ echo cucumber | ... -4
cucu
$ echo 1461624333 | .. -3
1461624
...
etc.
我找不到辦法使用${str:0:-3}
語法管道。
使用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
刮鬍子的字符數配管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
這似乎工作!大。謝謝! – Agzam
GNU head
是另一種選擇(去掉最後n
字符來自輸入字符串作爲整體 - 即使它跨越多行):
$ printf '1461624333' | head -c -3 # drop last 3 chars.
1461624
請注意,如果您使用echo
代替printf
,有一個尾隨\n
必須考慮到,所以你必須添加1
到計數(和輸出不會有拖尾\n
)。
警告:head -c
運行在字節,因此只能用ASCII字符和其他單字節編碼工作。
一種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. 'ä'
它總是返回前3個字符, '回聲袋鼠| cut -b 1-3' – Agzam
這就是'-b 1-3'應該告訴'cut'。你從1開始,並告訴你想要多少個字符。 –
就是這樣 - 我不知道字符串中有多少個字符,我需要最後刪除3個 – Agzam