2012-07-13 138 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