Cho*_*hea 7 bash sed command-substitution
我正在尝试使用 sed 用该序列中的字符数量替换相同字符的序列,但不知何故出了问题。
我正在尝试以下操作:
echo aaabbdd | sed -e 's/a*/'"`wc -m &`/"
Run Code Online (Sandbox Code Playgroud)
但这会返回,0bbdd而我希望它返回3bbdd。
我真的不知道到底出了什么问题 sed 似乎知道要替换什么并尝试执行 wc 命令,但不知何故 wc 将某些东西计算为空?我不知道如何解决这个问题,有人可以帮助我吗?
谢谢!
您试图实现的目标确实是可能的,但只能使用 GNU sed 并使用e命令。因此,如果您不介意可能出现的便携性问题,您可以尝试一下。
例如,您的示例将如下所示:
>echo aaabbdd | sed -e 's/a*/echo `echo -n & | wc -m`/;e'
3bbdd
Run Code Online (Sandbox Code Playgroud)
如果删除;e,您将看到一个中间命令(这有助于理解为什么有两个 echo'es)
echo `echo -n aaa | wc -m`bbdd
Run Code Online (Sandbox Code Playgroud)
如果您想替换多个匹配项,这可能会更棘手,但仍然可以通过链接替换来完成:
>echo aabbaadd | sed -re 's/a+/`echo -n &|wc -m`/g;s/.*/echo &/;e'
2bb2dd
Run Code Online (Sandbox Code Playgroud)
当然还有更好的工具可以满足您的任务,例如awk,它具有内置的length()函数。
参考:
聚苯乙烯
另请注意,如果您的输入数据包含引号,则必须小心地将它们转义,或临时替换它们(即使用 sed y/// 命令)才能使其正常工作。
| 归档时间: |
|
| 查看次数: |
10715 次 |
| 最近记录: |