使用 sed 在行尾追加

Gyp*_*aut 2 bash sed

我已经看到其他答案试图解决我的问题,但我无法解决。

#!/bin/bash
s=org.gnome.Terminal.Legacy.Keybindings
g=$(echo $s | sed "s|\.|/|g") 
echo $g
Run Code Online (Sandbox Code Playgroud)

我有上面的脚本返回

org/gnome/Terminal/Legacy/Keybindings
Run Code Online (Sandbox Code Playgroud)

但我需要/在此末尾附加,以便它变成

org/gnome/Terminal/Legacy/Keybindings/
Run Code Online (Sandbox Code Playgroud)

如何为此扩展我的 sed 脚本?

Gen*_*sky 8

如果您使用的是 bash,那么您实际上并不需要 sed。

s="org.gnome.Terminal.Legacy.Keybindings"
g=${s//.//}/
Run Code Online (Sandbox Code Playgroud)

阅读bash 手册页 ( )的参数扩展部分${parameter/pattern/string},它还有许多其他有用的东西。

使用sed,还可以指定多个表达式,有时可读性更好。

s="org.gnome.Terminal.Legacy.Keybindings"
g=$(sed -e 'y,.,/,' -e 's,$,/,' <<<$s)
Run Code Online (Sandbox Code Playgroud)

请注意,使用ycommand 您不必转义., ycommand 接受文字字符。


zep*_*lin 6

尝试这个:

sed 's/\.\|$/\//g'
Run Code Online (Sandbox Code Playgroud)
  • | 是交替运算符。
  • $ 将匹配行尾。

演示:

%echo org.gnome.Terminal.Legacy.Keybindings|sed 's/\.\|$/\//g'
org/gnome/Terminal/Legacy/Keybindings/
Run Code Online (Sandbox Code Playgroud)