如果我有这样的字符串:
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。
答案 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符号获取变量。