bash在每行文件中搜索字符串

时间:2011-04-17 19:33:21

标签: bash string file-io

我正在尝试看起来非常简单的任务:使用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的简单方法我不知道?

2 个答案:

答案 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中的相同问题。