2017-06-02 9 views
-1

ich habe Skript. In diesem Skript habe ich Suchen und Ersetzen von Wörtern gemacht. Wort für Wort bis zum Wort "Ende". Es ist in Ordnung und es funktioniert. Sie können Körper meines Skripts sehen:Wie man mehrere Suchen und Ersetzen in Dateien über Bash

#!/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 

Es funktioniert für mich. Ich habe in der Ergebniskonsole, wo ich endlos Wörter schreiben kann, aber wenn ich so etwas machen möchte: Wie kann ich mehrere Wörter hintereinander schreiben.

Zum Beispiel: "dog" "cat" "Fisch"

Und suchen und alle diese Worte ersetzen. Wie kann es gehen? Zum Beispiel, wenn ich diese Wörter ersetzen muss ("elephat" "Maus" "Vogel"). Wie kannst du das machen? Ich meine Suche und ersetzen Wörter, wie Argumente.

+0

Sie meinen, die Wörter als Argumente zu ersetzen? Oder lesen Sie sie aus einer Datei? – airos

+1

Sie müssen lernen, einzumessen. Ich werde bearbeiten. Aus Liebe zu Gott, Code in lesbarer Form. – SaintHax

+0

Ich meine Wörter wie Argumente – Piduna

Antwort

0

Ihr Englisch ist grob, aber ich denke, Sie wollen in der Lage sein, mehrere Wörter einzugeben und sie durch ein neues zu ersetzen?

Mit dem folgenden Code können Sie ein Programm wie replace_words one two three ausführen und dann aufgefordert werden, eine Liste von Wörtern zu ersetzen, z. 1 2 3. Danach wird es beendet.

declare -a replace_list=("[email protected]") # 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 
0

Sie brauchen nur eine Schleife, um die Argumente zu verarbeiten.

Angenommen, Sie führen Sie das Skript Paare von Original-Ersatz Wörter vorbei (myscript.sh original_word1 replacement1 original_word2 replacement2 ...) wäre es so etwas wie die folgenden:

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 

Beachten Sie, dass, wenn der Benutzer eine letzte passiert Original-Wort ohne Ersatz das Skript ignoriert es einfach

Verwandte Themen