我有一个以下格式的文件:

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 [ "$head" != "" ]; then
 (do something...)
elif [ "$head" != "" ]; then
 (do something...)
fi

有什么想法吗?

最佳答案

纯bash解决方案怎么样?Bash有一个内置的regexp功能,可以用~字符触发。
不过,请注意,使用bash read line处理大型文件不会产生最佳性能。。

#!/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

关于linux - bash脚本中grep单行的shell脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22905680/

10-16 11:24