我正在尝试看起来非常简单的任务:使用bash搜索文件中的字符串,如果存在,则将其输出到另一个文件。它可能是时差,但这应该有效:
#!/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的简单方法我不知道?
答案 0 :(得分:27)
不要使用bash,请使用grep。
grep -F "$cnty" wheatvrice.csv >> wr_imp.csv
答案 1 :(得分:3)
虽然我建议只使用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的命令涉及String拆分,因此每个单词都在循环中处理,而不是每一行。
示例1中的相同问题。