我有具有这样如何在外壳脚本图案之前提取字符串
线1
线2
线3
======
线4
行内容的可变5
线6
======
.........
线n
======
现在我想在所有发生'======'模式之前提取行,我想将它分配给每个变量。
预期输出
VAR1 =行1
线2
线3
VAR2 = 4行
线5
线6
...........
Var_n =线n
将它存储在一个数组中也被接受
如何做到这一点?
我有具有这样如何在外壳脚本图案之前提取字符串
线1
线2
线3
======
线4
行内容的可变5
线6
======
.........
线n
======
现在我想在所有发生'======'模式之前提取行,我想将它分配给每个变量。
预期输出
VAR1 =行1
线2
线3
VAR2 = 4行
线5
线6
...........
Var_n =线n
将它存储在一个数组中也被接受
如何做到这一点?
可以实现使用参数扩展像
str="mystring:yourstring" //here assume ":" is pattern
var=${str%:*}
echo $var
为了您的信息,您可以使用#
代替%
模式之后得到的字符串
var=${str#*:}
这不是我所期待的答案。试着理解我编辑的问题 – Kumaran
@kumaran回答了大约5小时前的问题,你完全按照不同的要求编辑了问题(仅3分钟前)!你怎么能说这不是!!先学习如何提问。 5小时后你意识到这不是你的答案。但我说你错误地问了问题,我正确回答了这个问题。看到votig。 –
#!/bin/bash
# original string
str="some lines1 ====== some lines2 ======"
# parse the string
v1="${str%% =*}" # beginning at right, remove all to ' ='
tmp="${str% =*}" # beginning at right, remove first occurrence of ' =*'
v2="${tmp##*= }" # beginning at left, remove all to '= '
# print the string and variable
echo "str: $str"
echo " v1: $v1"
echo " v2: $v2"
exit 0
输出:
$ bash somelines.sh
str: some lines1 ====== some lines2 ======
v1: some lines1
v2: some lines2
+1用于提示参数扩展。只是一个侧面说明:在(非数组)分配中扩展时不执行分词/通配,因此不需要引号。 'v1 = $ {str %% = *}'等等。 –
@rankin您的上述解决方案对我无效 – Kumaran
哪部分不工作?我有你指定的字符串,并按照你的指定将它分成v1和v2,所以你认为哪部分“不起作用?” –
如何用这些数据初始化变量?你可以展示它吗? –
@Jayesh我使用var + =“$(
Kumaran
对不同的变量使用相同的逻辑,例如'var1 + =“$(< FILE1.TXT)”,VAR2 + = “$(