如何在ksh中的某个字符串后提取子字符串?

时间:2012-10-04 15:28:14

标签: string substring ksh solaris-10

如果我有这样的字符串:

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。

6 个答案:

答案 0 :(得分: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的解决方案看起来是正确的。

答案 1 :(得分: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手册页中查找“参数替换”。

答案 2 :(得分:2)

(对不起,这个晚了一点!) 您打算如何确定“123”是要提取的部分?如果标准只是它是“=”符号后的第一个字段,则可以执行:

回声“重要变量= 123其余部分并不重要。”| cut -f2 -d = | cut -f1 -d“”

答案 3 :(得分:1)

使用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命令和测试正则表达式的开始   - 。*匹配任何东西,从零开始的任意次数   - 重要变量=完全匹配“重要变量=”,包括前面的空格   - (\ d \ d \ d)三个匹配3个数字,封闭的转义括号启用后引用实际匹配的3个数字   - 。*空格和。*(任何)再次   - /测试正则表达式结束   - \ 1替换字符串

匹配的文本(实际上是所有$ x)将替换为替换字符串,即$ x中的3位数字。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我过去曾经使用过它。

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

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