我正在学习bash脚本,我试图理解正则表达式如何与bash一起工作。在我的简单程序中,我有一个各种不同行的文件,但想要匹配一个简单的int对,用逗号和空格分隔的两个数字的格式如下:123,123。我也想匹配行这样我就可以轻松地从行中提取第一个和最后一个数字。但是当我将一个示例文件传递给我的程序时,它与我期望的任何行都不匹配。
代码:
#!/bin/bash
re="([0-9]+)(, )([0-9]+)"
echo $1
file1=$1
while IFS= read -r line; do
echo "The line is: $line"
if [[ $line =~ $re ]]; then
echo ${BASH_REMATCH[0]};
echo ${BASH_REMATCH[1]};
echo ${BASH_REMATCH[2]};
fi
done < $1
sample.txt的:
56, 345
Hello world 1234
Hello world, 1234
Hello world1234
BAd
Hello
Hello World
Hello dog
预期产出:
This line is: 56, 345
56
,
This line is: Hello world 1234
This line is: Hello world, 1234
This line is: Hello world1234
This line is: BAd
This line is: Hello
This line is: Hello World
This line is: Hello dog
实际输出:
./asymmetrickey_encr keys.txt
./asymmetrickey_encr: line 4: syntax error near unexpected token `('
./asymmetrickey_encr: line 4: `re=([0-9]+)(, )([0-9]+)'