【问题标题】:How to replace words in file in bash如何在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

请问我做错了什么?

【问题讨论】:

    标签: regex bash awk sed


    【解决方案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
      猜你喜欢
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      相关资源
      最近更新 更多