Linux
使用 for 循環切換大小寫以匹配字元串
我正在嘗試以下事情但無法成功
我有以下內容的文件
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