2011-07-19 10 views
38

Po prostu weź ten kod jako przykład. Udając, że jest to plik HTML/tekstowy, jeśli chciałbym wiedzieć, ile razy pojawi się echo, w jaki sposób mogę to zrobić za pomocą bash?Jak mogę policzyć wystąpienia ciągu w pliku przy użyciu bash?

new_user() 
{ 
    echo "Preparing to add a new user..." 
    sleep 2 
    adduser  # run the adduser program 
} 

echo "1. Add user" 
echo "2. Exit" 

echo "Enter your choice: " 
read choice 


case $choice in 
    1) new_user  # call the new_user() function 
     ;; 
    *) exit 
     ;; 
esac 

Odpowiedz

51

Wyjście to będzie liczba linii które zawierają szukania ciąg.

grep -c "echo" FILE 

Nie spowoduje to jednak policzenia liczby wystąpień w pliku (np. Jeśli masz echo kilka razy w jednym wierszu).

edit:

Po odtworzeniu całego kawałka, można uzyskać liczbę wystąpień użyciu tej brudnej trochę kodu:

sed 's/echo/echo\n/g' FILE | grep -c "echo" 

Zasadniczo dodaje nowej linii po każdym wystąpieniu echa więc każdy z nich znajduje się na własnej linii, pozwalając grepowi liczyć te linie. Możesz dopracować wyrażenie regularne, jeśli chcesz tylko słowo "echo", w przeciwieństwie do "echo", na przykład.

+0

Więc co można zrobić, jeśli istnieje kilka echo w tej samej linii? np. echo time echo a echo –

+0

Zaktualizowałem swoją odpowiedź, która, mam nadzieję, zadziała dla ciebie. –

+0

Dzięki. Spędź jeszcze kilka minut, jeszcze jedno pytanie. jeśli chciałbym usunąć trzecie wystąpienie echa. co mogę zrobić? –

0

Podejmuję tutaj pewne domysły, ponieważ nie bardzo rozumiem, o co prosisz.

Myślę, że to, czego chcesz, to liczba linii, w której wzorzec "echo" pojawia się w podanym pliku.

Wkleiłem twój przykładowy tekst do pliku o nazwie 6741967.

Najpierw grep znajdzie mecze:

[email protected]:tmp$grep echo 6741967 
    echo "Preparing to add a new user..." 
echo "1. Add user" 
echo "2. Exit" 
echo "Enter your choice: " 

drugie, korzystają wc -l policzyć linie

[email protected]:tmp$grep echo 6741967 | wc -l 
     4 
+0

dzięki twojej pomocy. Przepraszam, że sprawiłeś, że się pomylisz.Moje pytanie to policzyć liczbę wystąpień w pliku –

+2

Jeśli zrobisz grep -o echo 6741967, wypisze on nowy wiersz dla każdego z nich, wtedy możesz użyć: grep -o echo 6741967 | wc -l i będzie uwzględniało wiele 'echo w jednym wierszu oraz – Wivlaro

87

liczba wystąpień strunowych (nie linie) można uzyskać stosując grep z Opcja -o i wc (liczba słów):

$ echo "echo 1234 echo" | grep -o echo 
echo 
echo 
$ echo "echo 1234 echo" | grep -o echo | wc -l 
2 

więc pełne rozwiązanie problemu będzie wyglądać następująco:

$ grep -o "echo" FILE | wc -l 
+0

Uważam, że to proste rozwiązanie, nie jestem pewien złożoności czasu – kishorebjv

Powiązane problemy