如何使用Shell脚本在文本文件中的查找单词旁边添加特定单词?

时间:2013-12-04 13:47:46

标签: bash shell

我试图在文本文件中读取特定单词(Apple),我需要使用shell脚本在查找单词(Apple)旁边添加一个特定单词(Samsung)。

我知道如何使用shell脚本读取文件并找到特定的单词。

#!/bin/bash

LOGFILE =$1

if[-f $LOGFILE ];
then
awk '/Apple/'
else 
echo "$LOGFILE not found "
fi

我需要知道如何在同一个文件中的查找单词旁边添加新单词。

示例

公司 Apple 成立于1976年4月1日,并于1977年1月3日成为 Apple 计算机公司。“计算机”一词已从2007年1月9日苹果公司将其名称命名为Apple,同时史蒂夫·乔布斯推出iPhone,反映出其转向消费电子产品的重点。

预期

公司 Apple 三星 成立于1976年4月1日,并于1977年1月3日成立为Apple Computer,Inc .. 2007年1月9日,当史蒂夫·乔布斯推出iPhone时,“计算机”一词从名称 Apple 三星 中删除,反映出将重点转向消费电子产品。

感谢。

3 个答案:

答案 0 :(得分:3)

只需使用sed

sed -i 's/Apple /& Samsung /g' myfile.txt

-i标志(就地)将输出写回覆盖源文件的文件。

替换中的

&表示“完全匹配”。

答案 1 :(得分:2)

使用参数扩展替换文本

首先,您的Bash语法已损坏。您的脚本不会按照书面形式运行。

其次,如果要在shell中严格执行此操作,则应使用shell parameter expansion执行替换,然后使用 fmt 命令重新生成段落。例如:

#!/bin/bash

LOGFILE="$1"

if [[ -r "$LOGFILE" ]]; then
    while read; do
      echo "${REPLY//Apple/Apple Samsung}"
    done < "$LOGFILE" | fmt
else
  echo "Error: $LOGFILE not readable" > /dev/stderr
  exit 66
fi

答案 2 :(得分:0)

sed 's/Apple/& Samsung/g' $LOGFILE