Bash

線上查找特定符號後的單詞

  • November 21, 2018

我需要製作一個 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**

我們需要的:

  1. 檢查文件的腳本:word1word2word3word4
  2. 如果線上上存在單詞,則將該複製到單獨的文件中。
  3. 完成所有操作後,在新文件上執行 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

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