Linux

使用 for 循環切換大小寫以匹配字元串

  • May 2, 2022

我正在嘗試以下事情但無法成功

我有以下內容的文件

events_0-new
events_1-new
events_2-new
events_3-new
events_4-new
events_5-new
events_6-new
system-events_0-new
system-events_1-new
system-events_2-new
system-events_3-new
system-events_4-new
system-events_5-new
system-events_6-new
ylog_0-new
ylog_1-new

我有下面的腳本

for i in `cat new.txt`
do
  case $i in
    system-events_*)
      for file in `cat new.txt | grep system-events_*`
       do
               echo "$file"  >> polo.txt
       done
       ;;
    events_*)
              for file in `cat new.txt | grep events_*`
           do
                   echo "$file" >> polo.txt
       done
       ;;
    ylog_*)
      for file in `cat new.txt | grep ylog_*`
           do
                   echo "$file"  >> polo.txt
       done
       ;;
   esac
done

但它會多次列印值,因為我在這裡使用了案例

電流輸出

events_0-new
events_1-new
events_2-new
events_3-new
events_4-new
events_5-new
events_6-new
events_0-new
events_1-new
events_2-new
events_3-new
events_4-new
events_5-new
events_6-new
system-events_0-new
system-events_1-new
system-events_2-new
system-events_3-new
system-events_4-new
system-events_5-new
system-events_6-new
system-events_0-new
system-events_1-new
system-events_2-new
system-events_3-new
system-events_4-new
system-events_5-new
system-events_6-new
ylog_0-new
ylog_1-new
ylog_0-new
ylog_1-new

所需的輸出應該是如果 events_* 的大小寫匹配,它應該只列印一次所有事件輸出,它不應該為 events_0-new 然後 events_1-new 執行相同的案例,等等 events_2-new 直到結束。

如果 events_* 的大小寫匹配,這就是我想要的,那麼它應該列印如下而不是七次 events_0-new events_1-new events_2-new events_3-new events_4-new events_5-new events_6-new

實際上我想在 curl 命令中使用它們作為環境變數來插入僅屬於該字元串的數據

例子:

curl -X PUT 'http://localhost:9200/$file' -H 'Content-Type: application/json' -d events.json
curl -X PUT 'http://localhost:9200/$file' -H 'Content-Type: application/json' -d ylog.json
curl -X PUT 'http://localhost:9200/$file' -H 'Content-Type: application/json' -d system-events.json

這裡的 $file 應該從 new.txt 作為 events_0 …events_6 等其他字元串獲取。

可能是我缺乏完成這項工作的地方,或者不知道最簡單的方法。

如果案例匹配,您可以幫助我如何只列印一次它應該執行一次作為案例它不應該重複那些具有相同案例的其他字元串。

請指導。

問候,山姆

看起來好像您只想獲取_讀取的字元串中第一個之前的部分,new.txt並在呼叫中使用它curl

#!/bin/bash

headers=( -H 'Content-Type: application/json' )
baseurl='http://localhost:9200'

while IFS= read -r entry; do
   data=${entry%%_*}.json  # strip off all at first "_" and add ".json"

   curl -X PUT "${headers[@]}" -d "$data" "$baseurl/$entry"
done <new.txt

如果您需要在處理文件之前從文件中過濾掉三種特定類型的行:

#!/bin/bash

headers=( -H 'Content-Type: application/json' )
baseurl='http://localhost:9200'

grep -e '^events__' -e '^system-events_' -e '^ylog_' new.txt |
while IFS= read -r entry; do
   data=${entry%%_*}.json  # strip off all at first "_" and add ".json"

   curl -X PUT "${headers[@]}" -d "$data" "$baseurl/$entry"
done

引用自:https://unix.stackexchange.com/questions/701099