【发布时间】:2011-08-17 08:59:12
【问题描述】:
我在 shell 脚本中使用 sed 来编辑文件系统路径名。假设我要替换
/foo/bar
与
/baz/qux
但是,sed 的s/// 命令使用正斜杠/ 作为分隔符。如果我这样做,我会看到一条错误消息,例如:
▶ sed 's//foo/bar//baz/qux//' FILE
sed: 1: "s//foo/bar//baz/qux//": bad flag in substitute command: 'b'
同样,有时我想选择行范围,例如模式foo/bar 和baz/qux 之间的行。同样,我不能这样做:
▶ sed '/foo/bar/,/baz/qux/d' FILE
sed: 1: "/foo/bar/,/baz/qux/d": undefined label 'ar/,/baz/qux/d'
我能做什么?
【问题讨论】:
-
sed statement <<< cat -
@geirha 不确定你的意思。
-
试试
sed 'sahanag' <<< "haha"。在您的 aaa 示例中,它失败只是因为正则表达式为空白并且您要么分支到未标记的位置,并且 g 命令需要用分号分隔 - 要么 - 您正在分支到未标记的 ag 位置。您还可以使用不可打印的字符进行分隔,例如SOH $'\001'。你可以在这里看到一个工作示例:github.com/AdamDanischewski/gen-uniq-id/blob/master/… -
真正的问题是哪个分隔符是最好的????