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

Posted

技术标签:

【中文标题】如何在bash中替换文件中的单词【英文标题】:How to replace words in file in bash 【发布时间】:2022-01-18 23:25:33 【问题描述】:

我有一个包含以下内容的文件:

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

我需要用xxxx 替换以Blbl 开头的每个单词并将其保存到新文件中。我尝试了这个,但它不起作用。

while read line; 
do pokus="$line//[Bl|bl].* /xxxx" 
echo $pokus
done < "$TEXT" > "$TEXT".new

期望的输出是:

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

请问我做错了什么?

【问题讨论】:

【参考方案1】:

这可以使用sed 命令来完成:

sed 's/\<[Bb]l[[:alpha:]]*/xxxx/g' file

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

此处\&lt;[Bb]l[[:alpha:]]* 匹配以Blbl 开头后跟0 个或多个字母的单词。

【讨论】:

【参考方案2】:

第一种解决方案: 使用awkgsub 函数替换所有从Blbl 开始的字段,然后将其分配给xxxx.

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


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

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

【讨论】:

我认为您可以将第一个 awk 缩短为仅使用单词边界,因为在 Bb 和字符串的开头之间也有一个单词边界。 awk 'gsub(/\&lt;[Bb]l[^[:space:]]+/,"xxxx") 1' file

以上是关于如何在bash中替换文件中的单词的主要内容,如果未能解决你的问题,请参考以下文章

使用不同的文件替换一个单词 Bash

Bash:如何使用 sed 仅替换文件中的最后一次出现?

正则表达式仅用替换文件中的单词替换单词

如何使用 bash 脚本替换文件名中的空格

如何在 bash 脚本中用多行/流替换单个流/行?

如何在 bash 中的任意数量的空格之后搜索和替换字符串?