簡體   English   中英

用sed awk或grep替換單詞

[英]Substituting words with sed awk or grep

我想替換文本文件中的某些單詞。 特別是單詞的英語拼寫與美國拼寫。 我有兩個相同的拼寫排列順序,即

list_1 = [“舒適”,“克拉”,“支票”]
list_2 = ['cozy','karat','check']

我是否可以在文本文件中搜索list_1中的元素並替換為list_2中的元素?

這種方法假定您有權訪問GNU sed

首先要做的是使用此腳本從這些列表中獲取信息:

$ cat script.sh
list_1=('cosy' 'carat' 'cheque')
list_2=('cozy' 'karat' 'check')
for i in "${!list_1[@]}"
do
    echo "s/\\b${list_1[i]}\\b/${list_2[i]}/g"
done >spelling.sed

產生文件:

$ cat spelling.sed 
s/\bcosy\b/cozy/g
s/\bcarat\b/karat/g
s/\bcheque\b/check/g

現在,我們可以使用該文件來更改拼寫。 例如:

$ echo "Decosy makes a cosy cheque." | sed -f spelling.sed
Decosy makes a cozy check.

請注意, Decosy的拼寫不會更改。 這是因為使用了GNU擴展名\\b ,它表示單詞邊界。 這樣,僅整個單詞被改變。

這是一個可以在一個文件掃描中執行任務的awk腳本。

script.awk

BEGIN {
    patsplit(list1, arr1, /[[:alpha:]]+/);  # read array of word from list1
    patsplit(list2, arr2, /[[:alpha:]]+/);  # read array of word from list2
}
{                                    
    for (i in arr1) gsub(arr1[i], arr2[i]); # for each line, replace all words in arrays
}
1

執行:

 list_1=['cosy', 'carat', 'cheque']
 list_2=['cozy', 'karat', 'check'] 
 awk -v list1=$list_1 -v list2=$list_2 -f script.awk input.txt

請注意,此解決方案不考慮大寫單詞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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