gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:50:17 25 4
gpt4 key购买 nike

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

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

我不知道我要提前搜索的字符串,我想替换那个变量。

当我使用直接指定的字符串(例如“< main>:”)运行它时,它可以完美运行。我已经搜索过 awk 模式的工作原理以及如何替换变量。我已经尝试将 -v 标志用于 awk,直接使用 shell 变量 - 没有任何效果。

funcName="<${2}>:"

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"

OP 尝试中修复的问题:
  • 切勿将变量的名称与二进制名称或关键字名称保持相同,因此已更改 awk变量名到 awk_result .
  • 现在反引号的使用已被贬低,因此请始终包装您的变量以在 var=$(......your commands....) 中包含值已修复 awk_result多变的。
  • 现在让我们谈谈awk代码修复,我使用了index检查变量 FN 的值是否的方法存在于一行中,然后根据 OP 的要求制作一个 FLAG(一个变量 TRUE)并使其为假,直到该行为空。
  • 关于shell - 将 shell 变量替换为 awk 模式,查看文件扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58623990/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com