将shell变量替换为awk模式,查看文件扫描

将shell变量替换为awk模式,查看文件扫描,shell,awk,command-line,Shell,Awk,Command Line,注意:我是bash脚本和awk命令的noob-请原谅我犯的任何愚蠢的错误 我无法将shell变量替换为我的awk模式。我试图扫描一个文件,找到文件中第一个出现的特定字符串,然后按顺序打印每一行,直到它碰到一个空字符串/行 我不知道我事先搜索的字符串,我想在该变量中替换它 当我使用直接指定的字符串(例如“:”)运行此命令时,它工作得非常好。我已经搜索了awk模式如何工作,以及如何替换变量。我已经尝试对awk使用-v标志,直接使用shell变量-没有任何效果 funcName="<${2}&g

注意:我是bash脚本和awk命令的noob-请原谅我犯的任何愚蠢的错误

我无法将shell变量替换为我的awk模式。我试图扫描一个文件,找到文件中第一个出现的特定字符串,然后按顺序打印每一行,直到它碰到一个空字符串/行

我不知道我事先搜索的字符串,我想在该变量中替换它

当我使用直接指定的字符串(例如“
:”)运行此命令时,它工作得非常好。我已经搜索了awk模式如何工作,以及如何替换变量。我已经尝试对awk使用-v标志,直接使用shell变量-没有任何效果

funcName="<${2}>:"

awk=`awk -v FN="$funcName" '/FN/,/^$/' "$ofile"`

rfile=search.txt

echo -e "$awk" > "$rfile"
funcName=“:”
awk=`awk-v FN=“$funcName””/FN/,/^$/“$ofile”`
rfile=search.txt
echo-e“$awk”>“$rfile”

错误在于没有打印任何内容。我想打印所需字符串和下一个空行之间的所有行。

请尝试下面的内容,因为没有清晰的样本,所以尚未测试,但应该可以工作

funcName="<${2}>:"
awk_result=$(awk -v FN="$funcName" 'index($0,FN){found=1} found; /^$/{found=""}' "$ofile")
rfile=search.txt
echo -e "$awk_result" > "$rfile"
funcName=“:”
awk_result=$(awk-v FN=“$funcName””索引($0,FN){found=1}found;/^$/{found=”“}'”$ofile)
rfile=search.txt
echo-e“$awk_结果”>“$rfile”
OP尝试中修复的问题:

  • 切勿将变量名称与二进制名称或关键字名称保持相同,以便将
    awk
    variable name更改为
    awk\u result
  • 反勾号的使用现在已经贬值,因此始终将变量包装为具有
    var=$(…您的命令…)中的值。
    修复了
    awk\u结果
    变量中的值
  • 现在让我们讨论一下
    awk
    code修复,我使用了
    index
    方法检查变量
    FN
    的值是否存在于一行中,然后根据OP的要求设置一个标志(变量为TRUE)并设置为false,直到行为空

  • 你是一个救星@victor__von__doom需要进行剧烈的更改,因为1)当你需要将变量用作字符串时,你试图将其用作regexp;2)当标志始终是更好的方法时,你试图使用范围表达式(请参阅)。