我有一个property: value;
成对的文件(它是CSS)。我想浏览该文件,然后用正则表达式将某些值提取到shell变量中,同时用标记替换文件中的文本。
我为FILE1:
position: float;
background: url("data:image/loremipsum");
height: auto;
background: url("data:image/loremipsum2");
假设我要提取图像网址并将其保存到数组中:
FILE1=path/to/file1
URL[0]=$(echo "$FILE1" | grep "data:image" | awk ???)
# Expected: "data:image/loremipsum"
URL[1]=$(echo "$FILE1" | grep "data:image" | awk ???)
# Expected: "data:image/loremipsum2"
然后,从我提取文本的位置,将该文本替换为“ MARKER0”,“ MARKER1”,依此类推。
我以为解决此问题的方法将涉及awk,但我键入了内容man awk
,但我的头几乎掉了下来。假设我知道如何为此编写正则表达式,该从哪里开始呢?
我需要awk吗?是否需要循环遍历每个图像值?
您可以尝试以下吗?
arr=($(awk '/background/ && match($0,/\".*\"/){print substr($0,RSTART+1,RLENGTH-2)}' Input_file))
OR to use a variable's value for awk as an input then try following.
arr=($(echo "$VAR" | awk '/background/ && match($0,/\".*\"/){print substr($0,RSTART+1,RLENGTH-2)}'))
要打印数组的值,请尝试以下操作。
for i in "${arr[@]}"
do
echo "$i"
done
或者也可以使用数组值的打印来打印出适当知道的元素的索引值,然后尝试以下操作。
count=0
for i in "${arr[@]}"
do
echo "arr["$count"]=$i"
count=$((count + 1))
done
编辑:由于OP表示值之间可能存在空格。因此,可能的解决方案可能是打印awk
命令中的值,并在这些值之间添加一个新字符(它将用作BASH数组迭代的字段分隔符),%
因此我已经执行过操作,因此在运行awk命令时它将给出以下信息(使用测试值)在此处显示的输出中)
awk '/background/ && match($0,/\".*\"/){val=val?val "%" substr($0,RSTART+1,RLENGTH-2):substr($0,RSTART+1,RLENGTH-2)} END{print val}' Input_file
singh:test/ bla_bla_bla%singh:bla1/bla2
运行以下命令以创建名为的数组arr
。
arr=($(awk '/background/ && match($0,/\".*\"/){val=val?val "%" substr($0,RSTART+1,RLENGTH-2):substr($0,RSTART+1,RLENGTH-2)} END{print val}' Input_file))
现在,如果我们设置IFS='%'
并运行以下命令。
echo "${arr[0]}"
singh:test/ bla_bla_bla
echo "${arr[1]}"
singh:bla1/bla2
由于采用了新的分隔符,%
因此不会破坏其中包含空格的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句