如何在bash中替换文件中的单词

5

我有一个文件,内容如下:

Blekota blaboli o koblihach.
Blanka je bl...
GEwI
er

我需要将每个以Blbl开头的单词替换为xxxx并保存到新文件中。我尝试了这个方法,但它没有起作用。
while read line; 
do pokus="${line//[Bl|bl].* /xxxx}" 
echo $pokus
done < "$TEXT" > "$TEXT".new

期望的输出是:

xxxx xxxx o koblihach. 
xxxx je xxxx...
GEwI
er

请问我做错了什么?

2个回答

6
这可以使用 sed 命令来完成:
sed 's/\<[Bb]l[[:alpha:]]*/xxxx/g' file

xxxx xxxx o koblihach.
xxxx je xxxx...
GEwI
er

这里的 \<[Bb]l[[:alpha:]]* 匹配以 Blbl 开头,后跟 0 或多个字母的单词。


4

第一解决方案:使用 awkgsub 函数来替换所有以 Blbl 开头的字段,然后将其赋值给 xxxx

awk '{gsub(/(^[Bb]l|\<[Bb]l)[^[:space:]]+/,"xxxx")} 1' Input_file

第2种解决方案: 使用awk,可以尝试以下步骤。简单的解释是遍历每一行的每个字段,然后检查条件是否以Blbl开头,然后将其分配给xxxx,最后打印已编辑/未编辑的行。

awk '{for(i=1;i<=NF;i++){if($i~/^[Bb]l/){$i="xxxx"}}} 1' Input_file

2
我认为您可以仅使用单词边界来缩短第一个awk,因为在Bb与字符串开头之间也有单词边界。awk '{gsub(/\<[Bb]l[^[:space:]]+/,"xxxx")} 1' file - The fourth bird

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接