正则表达式,bash

时间:2014-01-15 21:22:46

标签: regex bash sed

我需要读取只有一行的ASCII文件coordinates.ascii

-I0.00130000258937/0.000899999864241

在bash脚本中,属性0.00130000258937为变量x_inc0.000899999864241y_inc。 猜测x_inc的正则表达式是:

(\d.\d+)(?=/)

但我不知道y_inc的正则表达式以及sed或grep命令/语法在bash中实现regexp ..

x_inc=$(sed -n '(\d.\d+)(?=/)' coordinates.ascii )     # does not work!!!

3 个答案:

答案 0 :(得分:5)

只是使用bash:

$ IFS="I/" read _ x_inc y_inc < coordinates.ascii
$ echo $x_inc
0.00130000258937
$ echo $y_inc
0.000899999864241

答案 1 :(得分:0)

使用awk

x_inc=$(awk -F"[I/]" '{print $2}' coordinates.ascii)
echo $x_inc
0.00130000258937

y_inc=$(awk -F"[I/]" '{print $3}' coordinates.ascii)

答案 2 :(得分:0)

以下是使用sedread的另一个版本。它一次读取两个变量:

read -r x_inc y_inc <<<$(sed 's@[-I/]@ @g' < coordinates.ascii); 

# $x_inc is now: 0.00130000258937
# $y_inc is now: 0.000899999864241

编辑:或根据评论

中建议的流程替换
read -r x_inc y_inc < <(sed 's@[-I/]@ @g' < coordinates.ascii);