我正在一个小工业盒子里为嵌入式Linux编写shell脚本.我有一个包含文本的变量pid: 1234,我想从行中删除前X个字符,因此只剩下1234个字符.我有更多需要"清理"的变量,因此我需要删除X个第一个字符,${string:5}并且由于某种原因在我的系统中不起作用.
盒子似乎唯一拥有的是sed.
我正在尝试使以下工作:
result=$(echo "$pid" | sed 's/^.\{4\}//g')
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
che*_*ner 185
以下应该有效:
var="pid: 1234"
var=${var:5}
Run Code Online (Sandbox Code Playgroud)
你确定bashshell是在执行你的脚本吗?
即使是POSIX兼容的
var=${var#?????}
Run Code Online (Sandbox Code Playgroud)
最好使用外部进程,但这需要您以固定长度模式的形式对5进行硬编码.
Ran*_*Dev 86
这是一个简洁的方法来切割前X个字符cut(1).此示例删除前4个字符.
echo "$pid" | cut -c 4-
Run Code Online (Sandbox Code Playgroud)
Mar*_*air 45
使用-r选项("在脚本中使用扩展正则表达式")sed来使用{n}语法:
$ echo 'pid: 1234'| sed -r 's/^.{5}//'
1234
Run Code Online (Sandbox Code Playgroud)
小智 11
从字符串中剪切前两个字符:
$ string="1234567890"; echo "${string:2}"
34567890
Run Code Online (Sandbox Code Playgroud)
这也可以完成这项工作:
echo "$pid"|awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
机会是,你也cut可以.如果是这样:
[me@home]$ echo "pid: 1234" | cut -d" " -f2
1234
Run Code Online (Sandbox Code Playgroud)
通过awk '{print substr($0,42)}'42 传递它比要删除的字符数多一个。例如:
$ echo abcde| awk '{print substr($0,2)}'
bcde
$
Run Code Online (Sandbox Code Playgroud)
那么,有这里已经解决方案sed,awk,cut以及使用bash的语法。我只想抛出另一个POSIX符合变量:
$ echo "pid: 1234" | tail -c +6
1234
Run Code Online (Sandbox Code Playgroud)
-c告诉尾巴从输入数据的末尾开始计算从哪个字节偏移开始,但是如果数字以+符号开头,则从输入数据的末尾开始。