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