如何通过bash在文件中进行多次搜索和替换

如何通过bash在文件中进行多次搜索和替换,bash,for-loop,search,replace,while-loop,Bash,For Loop,Search,Replace,While Loop,我有剧本。在这个脚本中,我对单词进行了搜索和替换。逐字逐句直到“结束”。这是好的,它的工作。您可以看到我的脚本正文: #!/bin/bash end=end until [ "$first" = "$end" ];do echo "please write first word"; read first if grep -q "$first" *txt; then echo "word is exists" grep

我有剧本。在这个脚本中,我对单词进行了搜索和替换。逐字逐句直到“结束”。这是好的,它的工作。您可以看到我的脚本正文:

#!/bin/bash

end=end   
until [ "$first" = "$end" ];do
    echo "please write first word";    
    read first   
    if grep -q "$first" *txt; then
        echo "word is exists"
        grep "$first" *txt
        echo "please write second word";    
        read second
        sed -i 's/'"$first"'/'"$second"'/g' *txt
    else
        echo "second word does not exists"
        exit 1
    fi
done
它对我有用。在结果控制台中,我可以无休止地循环单词,但是如果我想做这样的事情:我怎么能把多个单词连成一行呢

例如:“狗”“猫”“鱼”

然后搜索并替换所有这些单词。你怎么能做到?例如,如果我需要替换这些单词(“elephat”“mouse”“bird”)。你怎么能做到?
我的意思是搜索和替换单词,比如参数。

你的英语很粗糙,但我认为你希望能够提示输入多个单词,并用一组新单词替换它们

下面的代码将允许您运行类似于
replace_words one two three
的程序,然后提示您输入要替换的单词列表,例如
1 2 3
。之后,它退出

declare -a replace_list=( "$@" )    # get the replace list as passed arguments
echo -n "Enter words to replace with: ";        read -ra sub_list
for ((i=0; i < "${#replace_list[@]}"; ++i)); do
    if grep -q "${replace_list[$i]}" *txt; then
        echo "first word is exists"
        sed -i "s/${replace_list[$i]}/${sub_list[$i]}/g" *txt
    else
        echo "${replace_list[$i]} does not exists"
        exit 1
    fi
done
declare-a replace_list=(“$@”)#获取作为传递参数的替换列表
echo-n“输入要替换为的单词:”;read-ra sub_列表
对于((i=0;i<“${replace#u list[@]}”++i));做
如果grep-q“${replace_list[$i]}”*txt;然后
echo“第一个单词存在”
sed-i“s/${replace_list[$i]}/${sub_list[$i]}/g”*txt
其他的
回显“${replace_list[$i]}不存在”
出口1
fi
完成

您只需要一个循环来处理参数

假设您运行脚本传递成对的原始替换词(myscript.sh original_word1 replacement 1 original_word2 replacement 2…),它将如下所示:

while [[ $# -gt 1 ]]
do
  original="$1"
  replacement="$2"

  # your code for actually replacing $original with $replacement

  shift   # discard already processed original arg
  shift   # discard already processed replacement arg
done

请注意,如果用户传递最后一个原始单词而不进行替换,脚本将忽略它

您的意思是接收要替换的单词作为参数?或者从文件中读取它们?你必须学会缩进。我要编辑。看在上帝的份上,以可读的方式编写代码。我的意思是接受像论点这样的词语