bash поиск строки в каждой строке файла
Я пытаюсь выполнить очень простую задачу: используйте bash для поиска строк в файле, и если они существуют, выведите их в другой файл. Это может быть jetlag, но это должно работать:
#!/bin/bash
cnty=CNTRY
for line in $(cat wheatvrice.csv); do
if [[ $line = *$cnty* ]]
then
echo $line >> wr_imp.csv
fi
done
Я также попробовал это для полноты:
#!/bin/bash
cnty=CNTRY
for line in $(cat wheatvrice.csv); do
case $line in
*"$cnty"*) echo $line >> wr_imp.csv;;
*) echo "no";;
esac
done
оба выводят все, независимо от того, содержит ли строка CNTRY или нет, и я копирую/вставляю из, казалось бы, надежных источников, поэтому, по-видимому, есть что-то простое в bash-ness, что мне не хватает?
2 ответов
хотя я бы предложил просто использовать grep тоже, вопрос открыт, почему ваш подход не сработал. Здесь самореферентная модификация вашего второго подхода-с ключевым словом "bash", чтобы соответствовать себе:
#!/bin/bash
cnty=bash
while read -r line
do
case $line in
*${cnty}*)
echo $line " yes" >> bashgrep.log
;;
*)
echo "no"
;;
esac
done < bashgrep.sh
точки составляет while read -r line ... < FILE
. Ваша команда с cat включает разделение строк, поэтому каждое слово обрабатывается в цикле, а не каждая строка.
та же проблема в Примере 1.