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

String 如何在ksh中的某个字符串之后提取子字符串?,string,substring,ksh,solaris-10,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|u值,尽管这种格式确实适用于这样的代码:print${line}|

如果我有这样一个字符串:

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|u值,尽管这种格式确实适用于这样的代码:print${line}| awk'{print$1}| read SINGLE|u FILE

我是否缺少用其他语言执行此操作的简单命令


正在运行Solaris 10。

由于多种原因,您的命令失败:您需要

TEMP_VALUE=$(print "$line" | awk '...')
您可以通过以下方式使用ksh参数展开:

行=重要变量=123其余变量不重要。 tmp=${line*=}去掉包含等号的东西 num=${tmp%%*}去掉一个空格,并在第一个空格后面加上所有空格 打印$num==>123
在ksh手册页中查找参数替换。

我过去曾使用过此选项

$ x='The important variable=123 the rest is not important.'
$ print -r -- "${x/*=+([[:digit:]])[[:space:]]*/\1}"
123
echo var=123 | awk'开始{FS=}{print$2}'


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

我们是否假设我们想要的零件之前的长度始终相同?然后:

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的解决方案看起来是正确的。

使用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三个\d匹配的3位数字中,包含的转义括号允许反向引用实际匹配的3位数字 -。*一个空格和。*再加一次 -/end-of-test正则表达式 -\1替换字符串


匹配的文本全部为$x,实际上将被替换字符串替换,即$x中的3位数字

对不起,这次来晚了一点! 您打算如何确定123是要提取的零件?如果标准只是它是=符号后的第一个字段,则可以执行以下操作:


echo重要变量=123其余的不重要。| cut-f2-d=| cut-f1-d

对我来说,它与echo$x | sed s/*重要变量=\[0-9]*\./\1/是的,它可以工作。\d是[0-9]的快捷方式。您的正则表达式将使变量的值与任意位数(包括零位数)匹配。