bash - 使用 sed 递归替换字符串

标签 bash shell recursion sed

我有一个包含以下字符串的文件:

||||||

我想用 |""| 替换所有出现的 || ,所以我使用了

sed 's/||/|\"\"|/g' temp2.​​csv

但我得到的输出为:

|""||""||""| 而不是 |""|""|""|""|""|

我发现 sed 没有递归地进行替换,我怎样才能使 sed 递归地进行替换,以便仅当上一行没有出现 || 时才移动到下一行

感谢您的帮助。

最佳答案

最直接的方法是调用 sed 替换两次。但我认为这个 sed 单行可能会更好,因为如果你说,我想递归地将 |||..{n}..| 替换为 |""| ,它就可以工作。 “”|...{n}..|“”|

sed ':a s/||/|""|/g; t a' file

使用您的数据进行测试:

kent$  cat f
||||||

kent$  sed ':a s/||/|""|/g; t a' f
|""|""|""|""|""|

关于bash - 使用 sed 递归替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19452973/

相关文章:

algorithm - 给定一个二维字符数组,找到从左上角到右下角的所有路径

oracle - DBCA 无法以 root 身份运行

linux - 是否可以将选项(不是参数)传递给 bash 中的函数?

bash - awk 命令使用 for 循环打印多列

java - 递归快速排序多个错误

linux - 命令打印大文件,排序,大小为人类可读格式

bash - 从 shell 脚本中的后台函数中获取 PID

linux - 执行 printf 命令 shell 脚本

java - 如何使用 Java 运行 .sh 文件并获取其输出?

java - 关于用Files.walkFileTree删除符号链接(symbolic link)的查询