首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用sed awk或grep替换单词

使用sed awk或grep替换单词
EN

Stack Overflow用户
提问于 2015-02-03 04:21:09
回答 2查看 124关注 0票数 0

我想替换文本文件中的某些单词。特别是单词的英文拼写和美式拼写。我有两个拼写数组,它们的顺序相同,即

list_1=‘舒适’,‘克拉’,‘支票’

list_2=‘舒适’,‘克拉’,‘检查’

我是否可以在文本文件中搜索list_1中的元素,并根据list_2中的元素进行替换?

EN

回答 2

Stack Overflow用户

发布于 2015-02-03 06:05:13

这种方法假设您可以访问GNU sed

首先要做的是使用以下脚本从这些列表中获取信息:

代码语言:javascript
复制
$ 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

这将生成以下文件:

代码语言:javascript
复制
$ cat spelling.sed 
s/\bcosy\b/cozy/g
s/\bcarat\b/karat/g
s/\bcheque\b/check/g

现在,我们可以使用该文件来更改拼写。例如:

代码语言:javascript
复制
$ echo "Decosy makes a cosy cheque." | sed -f spelling.sed
Decosy makes a cozy check.

请注意,Decosy的拼写没有更改。这是因为使用了GNU扩展\b,它表示单词边界。这样,只有完整的单词才会被更改。

票数 2
EN

Stack Overflow用户

发布于 2019-06-24 00:23:49

下面是一个在一次文件扫描中完成该任务的awk脚本。

script.awk

代码语言:javascript
复制
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

执行:

代码语言:javascript
复制
 list_1=['cosy', 'carat', 'cheque']
 list_2=['cozy', 'karat', 'check'] 
 awk -v list1=$list_1 -v list2=$list_2 -f script.awk input.txt

注意:此解决方案不考虑大写单词。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28286046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档