2012-10-04 91 views
0

如果我有这样的字符串:如何在ksh中的特定字符串之后提取子字符串?

The important variable=123 the rest is not important. 

我想提取KSH中“123”的一部分。

到目前为止,我曾尝试:

print awk ' {substr($line, 20) }' | read TEMP_VALUE 

(这20部分只是暂时的,直到我工作,如何提取字符串的开始位置。)

但这只是打印awk ' {substr($line, 20) }' | read TEMP_VALUE(虽然这种格式确实使用这样的代码:print ${line} | awk '{print $1}' | read SINGLE_FILE)。

我错过了一个简单的命令来做到这一点(即在其他语言)?

运行Solaris 10

回答

5

你的命令失败多种原因:你需要像

TEMP_VALUE=$(print "$line" | awk '...') 

可以使用ksh的参数扩展,但:

line="The important variable=123 the rest is not important." 
tmp=${line#*=} # strip off the stuff up to and including the equal sign 
num=${tmp%% *} # strip off a space and all following the first space 
print $num  # ==> 123 

查找“参数替代“在ksh手册页中。

+0

太棒了,非常感谢! – Wikis

0
$ x='The important variable=123 the rest is not important.' 
$ print -r -- "${x/*=+([[:digit:]])[[:space:]]*/\1}" 
123 
0

我以前用过这个。

echo“var = 123”| awk'BEGIN {FS =“=”} {print $ 2}'

然后,如果您需要$ 1符号,您还可以获取变量。

6

我们是否假设在我们想要的部分之前总是有相同的长度?然后:

echo ${variable:23:3} 

或者,我们假设我们可以使用=标志123作为分隔符后的位置和空间?我们知道它总是3个字符吗?如果你知道你想要的部分开始与=并为3个字符长:

variable=${variable#*=} # strip off everything up to and including the '=' sign 
${variable:0:3} # get the next three characters. 

真正需要有关变量的长度和结构的详细信息。

如果您知道的只是=之后的任何内容,那么Glenn的解决方案看起来是正确的。

0

使用SED,行内编辑:

x='The important variable=123 the rest is not important.' 
echo $x | sed "s/.* important variable=\(\d\d\d\) .*/\1 

sed的字符串匹配X:

。 s/substitute命令并开始测试正则表达式 - 。*匹配任何东西,从0开始的任何次数 - 重要变量=完全匹配“重要变量=”,包括前面的空格 - (\ d \ d \ d)三个\\ s匹配3个数字,封闭转义圆括号启用回到引用3位实际匹配 - *一个空格和*(任何)再次 - 测试正则表达式/结束 - \ 1替换字符串

匹配文本(所有$ x的,其实)将被替换字符串替换,即$ x中的3个数字。

2

(对不起,有点迟到这个!) 你打算如何确定“123”是要提取的部分?如果标准仅仅是“=”符号后面的第一个字段,您可以这样做:

echo“重要变量= 123其余并不重要”| cut -f2 -d = | cut -f1 -d“”

相关问题