簡體   English   中英

bash腳本中grep單行的shell腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM