Bash Script, использующий Grep для поиска шаблона в файле - PullRequest
10 голосов
/ 16 июня 2010

Я пишу bash-скрипт для поиска шаблона в файле с использованием GREP.Я не знаю, почему это не работает.Это программа

echo "Enter file name...";
read fname;
echo "Enter the search pattern";
read pattern
if [ -f $fname ]; then
    result=`grep -i '$pattern' $fname`
    echo $result;
fi

Или есть другой подход для этого?

Спасибо


(содержимое файла)

Welcome to UNIX
The shell is a command programming language that provides an interface to the UNIX operating system.
The shell can modify the environment in which commands run.
Simple UNIX commands consist of one or more words separated by blanks. 
Most commands produce output on the standard output that is initially connected to the terminal. This output may be sent to a file by writing.
The standard output of one UNIX command may be connected to the standard input of another UNIX Command by writing the `pipe' operator, indicated by |

(рисунок)

`UNIX` or `unix`

Ответы [ 3 ]

18 голосов
/ 16 июня 2010

Одиночные кавычки вокруг $pattern в операторе grep не позволяют оболочке разрешать переменную оболочки, поэтому следует использовать двойные кавычки.

4 голосов
/ 16 июня 2010

Необходима только одна из этих точек с запятой (та, что перед then), но я обычно ее опускаю и ставлю then на отдельной строкеВы должны поместить двойные кавычки вокруг переменной, которую вы выводите, и вокруг переменной, содержащей ваш шаблон grep.Переменные, которые содержат имена файлов, также должны быть заключены в кавычки.read может отображать ваше приглашение.Вы должны использовать $() вместо кавычек.

read -p "Enter file name..." fname
read -p "Enter the search pattern" pattern
if [ -f "$fname" ]
then
    result=$(grep -i "$pattern" "$fname")
    echo "$result"
fi
0 голосов
/ 16 ноября 2017

read -p "Введите имя файла ..." fname read -p "Введите шаблон поиска", если [-f "$ fname"], то result = $ (grep -i -v -e $ pattern -e"$ fname") echo "$ result" fi

...