[英]shell script of grep single line in bash script
我有一个具有以下格式的文件:
123 2 3 48 85.64 85.95
Park ParkName Location
12 2.2 3.2 48 5.4 8.9
现在,我想编写一个Shell脚本以从该文件中提取行。 每行的第一项是一种标记。 对于不同的标志,我将进行不同的处理。 请参阅下面的代码:
head= ` echo "$line" | grep -P "^\d+" `
if [ "$head" != "" ]; then
(do something...)
fi
head=` echo "$line" | grep -P "^[A-Z]+" `
if [ "$head" != "" ]; then
(do something...)
fi
该代码有效。 但是我不喜欢写2“ if”的复杂方式。 我想要简单的东西:
if [ "$head" != "" ]; then
(do something...)
elif [ "$head" != "" ]; then
(do something...)
fi
有什么想法吗?
纯bash解决方案如何? Bash具有内置的正则表达式功能,您可以使用~
字符来触发。 请注意,尽管使用bash读取行处理巨大的文件不会产生最佳性能。
#!/bin/bash
file=$1
while read line
do
echo "read [$line]"
if [[ $line =~ ^[0-9] ]]; then
echo ' Processing numeric line'
elif [[ $line =~ ^[A-Za-z] ]]; then
echo ' Processing a text line'
fi
done < $file
这个怎么样。 我想它将满足您的要求
文件
123 2 3 48 85.64 85.95
公园ParkName地点
12 2.2 3.2 48 5.4 8.9
script.sh
while read line
do
echo $line | grep -qP "^\d+" && echo "Line starts with Numbers"
echo $line | grep -qP "^[a-zA-Z]+" && echo "Line Starts with String"
done < file
输出: -
bash script.sh
行以数字开头
行以字符串开头
行以数字开头
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.