代码之家  ›  专栏  ›  技术社区  ›  Owen Morgan

使用包含模式的变量匹配printf模式

  •  0
  • Owen Morgan  · 技术社区  · 7 年前

    在一段时间前创建脚本时,我查看了stackoverflow和其他脚本,发现printf的这种用法确实(或者我认为)满足了我的需要:

    printf '%s\n' '$+?multi_pack?a' "$content" .x | ex $log_output
    

    正如我的脚本中显示的那样。我知道它的结果是什么,以及大致如何使用printf。此行正在添加字符串 $content (这是命令扩展 content="$(cat $temp_file_2)" 其中temp_file_2包含我需要附加的文本)在使用ex文本编辑器的模式“multi_pack”最后一次出现之后。它必须是最后一次出现,因为在生成日志文件(通过循环)时会发生追加,并且模式可能会发生多次,但我只对上次出现模式感兴趣,因此在每次新出现时都会追加相关的文本(哪些更改)。模式的CE(反过来,它与上一次循环匹配的模式不同)。

    我正在尝试解决的问题是如何修改printf命令,使模式是一个变量,并在需要时进行更改(这将使附加文本的位置发生更改)。

    我试过这样的方法:

    printf '%s\n' "$+?${my_new_variable}?a" "$content" . x | ex $log_output
    

    printf '%s\n' "$+?$my_new_variable?a" "$content" . x | ex $log_output
    

    而产出并不是我所期望的……

    编辑

    巴玛的回答是我需要的。我想问的问题是‘我做得对吗?’为了帮助我找出导致输出不起作用的原因(正如我在切普纳编辑之前所解释的那样,这一行代码可能根本就不起作用——如果它确实是正确的话)。printf是一个红鲱鱼的种类,ex是做模式匹配。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Barmar    7 年前

    printf 似乎不需要这样做,请使用此处文档:

    ex $log_output <<EOF
    $+?${my_new_variable}?a
    $content
    .
    x
    EOF
    

    这样就不太可能出现断线错误。

    推荐文章