2012-02-09 36 views

回答

67

如何tail,與-c開關。例如,爲了得到最後的4個字符的「你好」:

echo "hello" | tail -c 5 
ello 

注意,我使用的5(4 + 1),因爲一個換行符通過echo加入。正如下面Brad Koch所建議的那樣,使用echo -n來防止添加換行符。

+0

完美非常感謝 – bing281 2012-02-09 22:54:19

+1

一個簡單而優雅的解決方案。在互聯網的其他地方,當我搜索時,我得到了一個更復雜的解決方案。但是這個,我認爲是最簡單和最棒的。謝謝。 – 2013-01-31 19:23:49

+3

'echo -n'會阻止添加新行字節。 – 2013-04-17 17:35:58

3

我通常使用

echo 0a.00.1 usb controller some text device 4dc9 | rev | cut -b1-4 | rev 
4dc9 
+1

儘管有效,但似乎很多流程都涉及到這項工作。 – 2012-02-14 15:24:32

+0

@JonathanLeffler:但是非常快。我經常發現「rev | cut | rev」是所有可能解決方案中最快的。 – choroba 2012-02-14 22:17:11

6

使用sed

lspci -s 0a.00.1 | sed 's/^.*\(.\{4\}\)$/\1/' 

輸出:

4dc9 
+1

你可以通過:sed -n'$ s /.* \(.... \)$/\ 1/p''來改善它。這隻會打印輸出的最後一行,並且4個點比用'。\ {4 \}'表示法描述它的6個字符更簡單。 – 2012-02-14 15:23:27

16

你真的想最後四個字符?它看起來像你想要的最後一個「單詞」就行了:

awk '{ print $NF }' 

這將工作,如果ID是3個字符,或5,以及。解決這個

+1

非常感謝您的幫助。 – bing281 2012-02-23 21:21:59

+0

@ bing281:不客氣。 – Johnsyweb 2012-02-23 21:25:30

+1

@downvoter:鑑於賓果表示這有幫助,你能解釋downvote? – Johnsyweb 2013-05-27 21:24:17

0

還有一個方法是使用<<<符號:

tail -c 5 <<< '0a.00.1 usb controller some text device 4dc9' 
6

試試這個,說如果字符串存儲在變量foo中。

foo=`lspci -s 0a.00.1` # the foo value should be "0a.00.1 usb controller some text device 4dc9" 
echo ${foo:(-4)} # which should output 4dc9 
+0

工作得很好。謝謝。 – deppfx 2015-04-21 21:46:50

2

如果真正的要求是,無論以複製其長度的最後一個空格分隔字符串,那麼最好的解決辦法似乎是使用... | awk '{print $NF}'通過@Johnsyweb給出。但是,如果這確實是有關從字符串的結尾開始複製字符固定數量的,再有就是,而不需要通過管道來調用任何其它子特定慶典的解決方案:

$ test="1234567890"; echo "${test: -4}" 
7890 
$ 

請注意,空間冒號和減號之間是必不可少的,因爲沒有它的完整字符串將交付到位:

$ test="1234567890"; echo "${test:-4}" 
1234567890 
$ 
+0

道歉,我只是注意到這個解決方案實際上與Mingjiang Shi的建議相同,只是省略了偏移量的括號。 – 2015-03-27 16:09:51

+1

如果需要,您可以刪除此答案。 – user4098326 2015-03-27 16:12:16

2

嘗試使用grep

lspci -s 0a.00.1 | grep -o ....$ 

這將打印每行最後4個字符。

但是,如果您想要輸出整個輸出的最後4個字符,請改爲使用tail -c4

0

而不是使用命名的變量,開發使用位置參數,這樣的做法:

set -- $(lspci -s 0a.00.1); # then the bash string usage: 
echo ${1:(-4)}     # has the advantage of allowing N PP's to be set, eg: 

set -- $(ls *.txt) 
echo $4       # prints the 4th txt file. 
相關問題