2012-07-13 136 views
76

我正在爲小型工業機器中的嵌入式Linux編寫shell腳本。我有一個變量,其中包含文本pid: 1234,我想從行中去掉第一個X字符,因此只保留1234個字符。我有更多的變量需要「清理」,所以我需要刪除X個第一個字符,而${string:5}在我的系統中由於某種原因不起作用。如何使用sed從字符串中剝離第一個X字符?

該盒子似乎只有一個是sed

我想作以下工作:

result=`echo "$pid" | sed 's/^.\{4\}//g'` 

任何想法?

+6

如果'$ {string:5}'不起作用,那麼您沒有使用Bash或其他支持該語法的shell。你使用的是什麼外殼和版本?你的屁股是什麼樣的?我的猜測是你正在使用'sh'(比如'dash')或者可能'zsh'。 – 2012-07-13 12:43:59

回答

17

這將做的工作太多:

echo "$pid"|awk '{print $2}' 
42

使用-r選項( 「使用擴展腳本中的正則表達式」)以sed使用{n}語法:

$ echo 'pid: 1234'| sed -r 's/^.{5}//' 
1234 
+1

謝謝,這是一個快速的答案!有用! – Kokesh 2012-07-13 12:03:51

+1

如果我想從字符串中去掉最後的X個字符,情況會如何? – Kokesh 2012-07-13 12:09:03

+5

@Kokesh:你可以使用'sed -r's /。{5} $ //''去掉最後5個字符 – 2012-07-13 12:19:55

6

有機會,你也有cut。如果是這樣的:

[[email protected]]$ echo "pid: 1234" | cut -d" " -f2 
1234 
+2

我試過CUT之前,但可能性有限:) – Kokesh 2012-07-13 12:17:44

+1

麻煩與' cut'是它不能合理處理空白的序列,使用'tr -s'''來「擠壓」空間會使它表現得更好。 – Thor 2012-07-13 13:27:03

+1

這並不意味着所有的歌聲都是跳舞的工具;它很簡單,就像它在罐頭上所說的那樣,並且可以廣泛使用。對於所述要求它應該工作得很好,而且從特定位置裁剪固定字符肯定更加健壯。 – 2012-07-13 13:39:16

125

下面應該工作:

var="pid: 1234" 
var=${var:5} 

確定bash是執行你的腳本的殼呢?

+0

工作過。 – 2015-01-14 23:11:01

+4

這應該是被接受的答案! – ndmeiri 2016-05-13 22:33:03

4

通過awk '{print substr($0,42)}'管道它,其中42是多於要丟棄的字符數。例如:

$ echo abcde| awk '{print substr($0,2)}' 
bcde 
$ 
45

下面是使用cut(1)削減第一個X字符的簡明方法。本示例刪除前4個字符。

echo "$pid" | cut -c 4- 
+1

這是最簡單的解決方案! – Brandon 2017-05-04 01:06:52

6

剪切前兩個從字符串中的字符:

string="1234567890"; echo "${string:2}" 
+0

這不起作用。 – luckytaxi 2016-02-29 15:02:04

+0

@ dtp70非常感謝一個通用的答案,它工作得很好! – wolfram77 2016-03-14 14:51:18

1

的另一種方法,使用cut代替sed

result=`echo $pid | cut -c 5-` 
+0

他想刪除前4個字符。這得到前4個字符。 – 2017-11-24 08:39:56

+1

更改代碼以使用剪切代替頭部。 – Evgeny 2017-11-25 12:43:53