我首先说我是shell脚本的新手,所以请不要开枪! :)
我有一个包含以下文字的文件:
1 : /
2 : /string-1/
4 : /string-2/
5 : /string-3/
我喜欢删除字符串的结束斜杠,所以结果应该是这样的:
1 : /
2 : string-1
4 : string-2
5 : string-3
我已尝试使用sed
,如下所示:
local_export_folder="/home/merianos/Documents/repositories/DatabaseBackup/tmp"
sed -i -e 's/\/([^\/]+)\//\1/' ${local_export_folder}/blogs.csv
但这不起作用。
我做错了吗?
答案 0 :(得分:3)
这对我有用:
sed 's#/\([^/]*\)/#\1#' file
这会捕获两个正斜杠之间的任何内容。替换是内容,没有斜线。
您可能遇到的一个问题是所有版本的sed都无法理解+
(一个或多个)。我已将其更改为*
(表示零或更多),这是更广泛认可的。如果您愿意,可以使用符合POSIX的\{1,\}
来表示一个或多个。
输出:
$ sed 's#/\([^/]*\)/#\1#' file
1 : /
2 : string-1
4 : string-2
5 : string-3
根据您的sed版本,您可以使用-r
或-E
开关启用扩展正则表达式。这意味着括号不需要转义就可以用作捕获组,并且+
被理解为:
sed -r 's#/([^/]+)/#\1#' file