我在一个小的工业用box编写shell脚本的嵌入式Linux。 我有包含文本的可变pid: 1234
,我想从行剥离第一X字符,所以只有1234停留。 我有更多的变数,我需要“干净”的,所以我需要切掉X第一字符和${string:5}
不会出于某种原因在我的系统工作。
盒子似乎唯一已经被sed
。
我想作以下工作:
result=$(echo "$pid" | sed 's/^.\{4\}//g')
有任何想法吗?
我在一个小的工业用box编写shell脚本的嵌入式Linux。 我有包含文本的可变pid: 1234
,我想从行剥离第一X字符,所以只有1234停留。 我有更多的变数,我需要“干净”的,所以我需要切掉X第一字符和${string:5}
不会出于某种原因在我的系统工作。
盒子似乎唯一已经被sed
。
我想作以下工作:
result=$(echo "$pid" | sed 's/^.\{4\}//g')
有任何想法吗?
这将做的工作太多:
echo "$pid"|awk '{print $2}'
下面应该工作:
var="pid: 1234"
var=${var:5}
你肯定bash
正在执行脚本的壳呢?
即使是POSIX兼容
var=${var#?????}
将优选使用外部过程,尽管这需要你硬编码5以固定长度的图案的形式。
这里的切使用第一X字符的简明方法cut(1)
本示例删除前4个字符。
echo "$pid" | cut -c 4-
使用-r
选项(“使用扩展的正则表达式在脚本”)到sed
为了使用{n}
语法:
$ echo 'pid: 1234'| sed -r 's/^.{5}//'
1234
从切串前两个字符:
$ string="1234567890"; echo "${string:2}"
34567890
机会是,你将不得不cut
为好。 如果是这样:
[me@home]$ echo "pid: 1234" | cut -d" " -f2
1234
管它通过awk '{print substr($0,42)}'
,其中42比字符下降的数目多一个。 例如:
$ echo abcde| awk '{print substr($0,2)}'
bcde
$
另一种方式,用cut
代替sed
。
result=`echo $pid | cut -c 5-`
而不是从一开始就删除n个字符,也许你可以只直接提取的数字。 是这样的...
$ echo "pid: 1234" | grep -Po "\d+"
这可能是一个更强大的解决方案,而且看起来更直观。
我发现,在回答纯净的sed通过提供这个问题 (当然,张贴了这个问题被张贴后)。 这不正是你问什么,只是在SED:
result=\`echo "$pid" | sed '/./ { s/pid:\ //g; }'\``
在点sed '/./
)是要匹配什么的。 你的问题是什么,我试图,但在我的情况,我想匹配文件中的特定行,然后取消注释。 在我的情况是:
# Uncomment a line:
sed -i '/#\ COMMENTED_LINE_TO_MATCH/ { s/#\ //g; }' /path/to/target/file
该-i
后sed
是编辑而不是文件(如果你想编辑文件之前,测试你的匹配表达式删除此开关)。
(FTR,我贴这个答案不是信贷,而是因为我想这样做完全用sed的,因为这问题问,没有前面的回答的解决了这个问题。)
那么,有已经在这里解决方案sed
, awk
, cut
和使用bash
语法。 我只是想在另一个POSIX扔符合变种:
$ echo "pid: 1234" | tail -c +6
1234
-c
告诉tail在该字节偏移量开始,从输入数据的结束计数,然而,如果数目与开始+
符号,它是从输入数据到结束的开始。