2014-07-24 15 views
-5

我有具有这样如何在外壳脚本图案之前提取字符串

线1
线2
线3
======
线4
行内容的可变5
线6
======
.........
线n
======

现在我想在所有发生'======'模式之前提取行,我想将它分配给每个变量。
预期输出
VAR1 =行1
线2
线3
VAR2 = 4行
线5
线6
...........
Var_n =线n

将它存储在一个数组中也被接受
如何做到这一点?

+0

如何用这些数据初始化变量?你可以展示它吗? –

+0

@Jayesh我使用var + =“$( Kumaran

+0

对不同的变量使用相同的逻辑,例如'var1 + =“$(< FILE1.TXT)”,VAR2 + = “$(

回答

2

可以实现使用参数扩展像

str="mystring:yourstring" //here assume ":" is pattern 
var=${str%:*} 
echo $var 

为了您的信息,您可以使用#代替%模式之后得到的字符串

var=${str#*:} 
+0

这不是我所期待的答案。试着理解我编辑的问题 – Kumaran

+0

@kumaran回答了大约5小时前的问题,你完全按照不同的要求编辑了问题(仅3分钟前)!你怎么能说这不是!!先学习如何提问。 5小时后你意识到这不是你的答案。但我说你错误地问了问题,我正确回答了这个问题。看到votig。 –

2
#!/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 
+0

+1用于提示参数扩展。只是一个侧面说明:在(非数组)分配中扩展时不执行分词/通配,因此不需要引号。 'v1 = $ {str %% = *}'等等。 –

+0

@rankin您的上述解决方案对我无效 – Kumaran

+0

哪部分不工作?我有你指定的字符串,并按照你的指定将它分成v1和v2,所以你认为哪部分“不起作用?” –

相关问题