如何在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
替换以Bl
或bl
开头的每个单词并将其保存到新文件中。我尝试了这个,但它不起作用。
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
此处\<[Bb]l[[:alpha:]]*
匹配以Bl
或bl
开头后跟0 个或多个字母的单词。
【讨论】:
【参考方案2】:第一种解决方案: 使用awk
的gsub
函数替换所有从Bl
或bl
开始的字段,然后将其分配给xxxx
.
awk 'gsub(/(^[Bb]l|\<[Bb]l)[^[:space:]]+/,"xxxx") 1' Input_file
第二个解决方案:使用awk
,您可以尝试关注。简单的解释是遍历每行的每个字段,然后检查条件是否以Bl
或bl
开头,然后将其分配给xxxx
,然后打印已编辑/未编辑的行。
awk 'for(i=1;i<=NF;i++)if($i~/^[Bb]l/)$i="xxxx" 1' Input_file
【讨论】:
我认为您可以将第一个 awk 缩短为仅使用单词边界,因为在B
或 b
和字符串的开头之间也有一个单词边界。 awk 'gsub(/\<[Bb]l[^[:space:]]+/,"xxxx") 1' file
以上是关于如何在bash中替换文件中的单词的主要内容,如果未能解决你的问题,请参考以下文章