sed:用 bash 函数输出替换模式

用户1407220

我想将 sed 模式匹配替换为作为逗号分隔列表的 ascii 十进制表示。将模式转换为 csv-integer sting 在 bash 函数内完成。该功能正在发挥作用,但我很难将其集成到 sed 调用中。这是示例代码:

#!/bin/bash
xx(){
##turns a string into its
##ascii-integer representation as a comma-separated list
##ignores double quotes at the start and end
    n=0;o=""
    for((k=1;k<$(echo $1 | wc -c);k++))
    do
    x=$(echo $1 | cut -b"$k")
    a=$(printf '%d\n' "'$x" )
    if [ $a = 34 ]
    then
        continue
    else
        n=$(($n+1))
        if [ $n = 1 ]
        then
        o=$a
        else
        o=$(echo $o","$a)
        fi
    fi
    done
    o=$(echo '('$o')')
    echo $o
}
##this works
xx "\"bla\""
##this does not work
y=$(echo "\"bla_x\"" | sed -e "s/bla/$(xx &)p")

该功能有效,但 sed 集成失败。从谷歌搜索我得到的印象是这原则上应该是可能的,所以可能只是一个小的语法错误。

非常感谢任何帮助。

祝一切顺利

注意:在最终应用程序中,sed 的输入是一个带有 reg-exp 模式的文件(例如“k_[[:alnum:]]{5}”),将被 csv 连接替换。所以最终“xx”必须从 sed 中调用。

来宾_7

仔细查看您的 sed 调用,它缺少 s/// 命令的结束斜杠。接下来,您将使用双引号,因此即使在 sed 运行之前,由于双引号插值,s/// 命令的 rhs 已被填充。这不是你想要的。然而,这仍然不会让你越过球门柱。

有一个鲜为人知的标志/eGNU sed's s///命令。在这种情况下,这正是医生所要求的。它的作用是,基于运行 rhs 中给出的 shell 代码并用它的输出替换它,动态构造 s/// 命令的 rhs。注意:它需要匹配整个模式空间。

这也要求您的用户定义函数被导出以供孩子使用。

#this does not work
##this is what YOU wrote 
y=$(echo "\"bla_x\"" |
sed -e "s/bla/$(xx &)p")

##this now WORKS
export -f xx
y=$(
echo '"bla_x"' |
sed -Ee '
  s/^.(.*)(_x).$/echo "$(xx '"\1"')\2"/e
'
)
echo "$y"
(98,108,97)_x

请注意在 sed 命令中使用单引号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

BASH:用SED替换PERL进行就地替换

来自分类Dev

如何使用sed用bash中的字符串列表替换某些模式

来自分类Dev

使用捕获组作为参数,用bash命令的输出替换sed

来自分类Dev

bash-用sed替换字符串

来自分类Dev

bash使用sed用Unicode字符替换数字

来自分类Dev

sed用反斜杠空格(Bash)替换空格

来自分类Dev

用bash中多个xml文件的SED替换PATH元素

来自分类Dev

用awk或sed替换模式

来自分类Dev

bash上的sed替换

来自分类Dev

用sed处理bash变量

来自分类Dev

用sed修改bash变量

来自分类Dev

sed用文件内容替换模式

来自分类Dev

无法用sed替换URL模式

来自分类Dev

用sed替换模式中的字符

来自分类Dev

用 sed 替换包含模式的行

来自分类Dev

使用sed替换bash文件中的变量-输出滞后

来自分类Dev

bash和sed:用for循环替换变量中的多个字符串

来自分类Dev

Bash-Sed / Awk用新行替换字符串

来自分类Dev

使用sed用bash变量替换双引号中的字符串

来自分类Dev

bash&sed:用for循环替换变量中的多个字符串

来自分类Dev

用Sed替换BASH中的字符串(当它有特殊字符时)

来自分类Dev

用sed替换几行

来自分类Dev

sed用变量替换

来自分类Dev

用sed替换url

来自分类Dev

用sed替换'\'

来自分类Dev

用 sed 替换 ® 字符

来自分类Dev

用全局模式定义的变量进行Bash替换

来自分类Dev

bash用模式替换文件中的多行文本

来自分类Dev

用bash中的命令输出替换受保护的块