Bash
線上查找特定符號後的單詞
我需要製作一個 bash 腳本來讀取包含變數 = 文本的文件。我需要的是腳本檢查文件,忽略變數名並在 = 符號後面的文本中搜尋一個單詞。
例子
thread.give_respect.title = Give respect thread.receive_respect.title = Gain respect thread.profile_respect.title = Show my Respect
由於第一部分是可變的,我不想改變尊重這個詞。只有 = 之後的那個,如果可能的話,我想檢查一下我要更改的單詞是否帶有 Capital,以便我可以相應地更改它。
編輯:
Esteban 我嘗試了您的腳本,但它在每行的開頭使用 ${var 創建文件。
對於其他問我要替換什麼的人:
我們有帶有字元串變數=它們的文本的巨大文件。例如:
admin.help_text = help admin.Help_text = Help home.faq_title = FAQ ...
這些文件包含超過 15000 個變數及其值。有時我們需要將一個單詞更改為不同的單詞,例如:
**help** to **guidance** **Help** to **Guidance** **helper** to **guide** **Helper** to **Guide**
我們需要的:
- 檢查文件的腳本:word1、word2、word3和word4。
- 如果線上上存在單詞,則將該行複製到單獨的文件中。
- 完成所有操作後,在新文件上執行 word1、word2 等的查找和替換。
例如,我們有包含所有變數及其內容的文件 (file1.txt):
admin.help_text = help admin.Help_text = Help home.faq_title = FAQ home.something.help = If you need help please send us email on...
當腳本啟動時,它將檢查:
word1 = help word2 = Help
並將找到的行保存到 file2.txt
admin.help_text = help admin.Help_text = Help home.something.help = If you need help please send us email on...
然後腳本檢查 file2.txt 並將幫助更改為指導和 幫助****指導
admin.help_text = guidance admin.Help_text = Guidance home.something.help = If you need guidance please send us email on...
自問題編輯以來:
@Apoc 如果模式數量有限,您可以使用以下命令執行步驟 1 和 2:
awk -F'=' '$2 ~ /word1|word2|word3|word4/' file1.txt > file2.txt
對於第 3 步,這取決於您想要的方式和必須執行的方式
我會做類似的事情:
- 循環每一行
- 檢索可變部分
- 進行您想要的修改
- 將修改後的行列印到臨時輸出文件中
- 用臨時文件替換文件
在 shell 腳本中:
#!/bin/sh # Loop through lines cat file.txt | while read line; do # Store variable part of the line var=`echo $line | sed -r 's/^[^=][ ]?(.*)$/\1/'` # Make the modification you want on var # ... # Print in temporary file the modified line echo $line | sed -r 's/^([^=])/\1 ${var}/' >> temporary_file.txt done # Replace file by temporary one mv temporary_file.txt file.txt