grep:将文件中的字符串与另一个字符串进行比较

时间:2015-11-06 12:02:29

标签: bash unix grep

我有一个文件路径列表,我需要与字符串进行比较:

git_root_path=$(git rev-parse --show-toplevel)
list_of_files=.git/ForGeneratingSBConfigAlert.txt
cd $git_root_path
echo "These files needs new OSB config:"
while read -r line
do
    modfied="$line"
    echo "File for compare: $modfied"
        if grep -qf  $list_of_files" $modfied"; then
            echo "Found: $modfied"
        fi
done < <(git status -s | grep -v " M" | awk '{if ($1 == "M") print $2}')

$ modified - 是一个字符串变量,用于存储文件路径

模式文件示例:

SVCS/resources/
SVCS/bus/projects/busCallout/
SVCS/bus/projects/busconverter/
SVCS/bus/projects/Resources/  (ignore .jar)
SVCS/bus/projects/Teema/
SVCS/common/
SVCS/domain/
SVCS/techutil/src/
SVCS/tech/mds/src/java/fi/vr/h/service/tech/mds/exception/
SVCS/tech/mds/src/java/fi/vr/h/service/tech/mds/interfaces/
SVCS/app/cashmgmt/src/java/fi/vr/h/service/app/cashmgmt/exception/
SVCS/app/cashmgmt/src/java/fi/vr/h/service/app/cashmgmt/interfaces/
SVCS/app/customer/src/java/fi/vr/h/service/app/customer/exception/
SVCS/app/customer/src/java/fi/vr/h/service/app/customer/interfaces/
SVCS/app/etravel/src/java/fi/vr/h/service/app/etravel/exception/
SVCS/app/etravel/src/java/fi/vr/h/service/app/etravel/interfaces/
SVCS/app/hermes/src/java/fi/vr/h/service/app/hermes/exception/
SVCS/app/hermes/src/java/fi/vr/h/service/app/hermes/interfaces/
SVCS/app/journey/src/java/fi/vr/h/service/app/journey/exception/
SVCS/app/journey/src/java/fi/vr/h/service/app/journey/interfaces/
SVCS/app/offline/src/java/fi/vr/h/service/app/offline/exception/
SVCS/app/offline/src/java/fi/vr/h/service/app/offline/interfaces/
SVCS/app/order/src/java/fi/vr/h/service/app/order/exception/
SVCS/app/order/src/java/fi/vr/h/service/app/order/interfaces/
SVCS/app/payment/src/java/fi/vr/h/service/app/payment/exception/
SVCS/app/payment/src/java/fi/vr/h/service/app/payment/interfaces/
SVCS/app/price/src/java/fi/vr/h/service/app/price/exception/
SVCS/app/price/src/java/fi/vr/h/service/app/price/interfaces/
SVCS/app/product/src/java/fi/vr/h/service/app/product/exception/
SVCS/app/product/src/java/fi/vr/h/service/app/product/interfaces/
SVCS/app/railcar/src/java/fi/vr/h/service/app/railcar/exception/
SVCS/app/railcar/src/java/fi/vr/h/service/app/railcar/interfaces/
SVCS/app/reservation/src/java/fi/vr/h/service/app/reservation/exception/
SVCS/app/reservation/src/java/fi/vr/h/service/app/reservation/interfaces/
kraken_test.txt
namaker_test.txt
shmaker_test.txt

我需要将文件搜索模式与字符串进行比较,是否可以使用grep?

2 个答案:

答案 0 :(得分:0)

这应该有效:

MediaRecorder
  • git status -s | grep -v " M" | awk '{if ($1 == "M") print $2}' | \ grep --file=.git/ForGeneratingSBConfigAlert.txt --fixed-strings --line-regexp 输出直接输入awk会完全避免grep循环。在大多数情况下,您发现您并不需要在其中打印调试消息等。
  • while获取一个模式的文件以匹配每行。
  • --file避免将模式中的任何字符视为特殊字符。
  • --fixed-strings锚定模式,使其仅在完整输入行匹配其中一个模式时才匹配。

所有这一切,你能澄清你实际想要完成的事情吗?

答案 1 :(得分:0)

我不确定我是否理解整体逻辑,但会想到一些直接的建议。

  • 在绝大多数情况下,您可以避免--line-regexp
  • 循环内一次有一行grep | awk的{​​{1}}循环是反模式。您可能只想在整个输入上运行一个while

你的问题仍然可以从对你实际想要完成的事情的解释中获益。

grep

我试图想出一种方法来添加你的人类可读的唠叨,但第二个想法,如果没有它,这个程序可能更好。

grep的{​​{1}}选项可能有误,取决于您真正希望实现的目标。