在bash中我需要从字符串中删除第一个和/或最后一个字符,但前提是它只是某个字符。
如果我有|我需要
/foo/bar/hah/ => foo/bar/hah
foo/bar/hah => foo/bar/hah
你可以贬低我没有列出我尝试过的所有内容。但事实是我已经尝试了至少35个不同的sed字符串和bash字符的东西,其中许多是来自堆栈溢出。我根本无法做到这一点。
答案 0 :(得分:4)
纯粹bash:
$ var=/foo/bar/hah/
$ var=${var%/}
$ echo ${var#/}
foo/bar/hah
$
或sed:
$ sed -r 's@(^/|/$)@@g' file
答案 1 :(得分:4)
简单的问题是什么?
sed "s/^\///;s/\/$//"
输出
foo/bar/hah
foo/bar/hah
答案 2 :(得分:1)
这个怎么样:
echo "$x" | sed -e 's:^/::' -e 's:/$::'
答案 3 :(得分:1)
继@ sputnick的回答和this answer之后,这是一个可以做到的功能:
STR="/foo/bar/etc/";
STRB="foo/bar/etc";
function trimslashes {
STR="$1"
STR=${STR#"/"}
STR=${STR%"/"}
echo "$STR"
}
trimslashes $STR
trimslashes $STRB
# foo/bar/etc
# foo/bar/etc
答案 4 :(得分:1)
echo '/foo/bar/hah/' | sed 's#^/##' | sed 's#/$##'
答案 5 :(得分:1)
假设/
字符是您尝试删除的唯一字符,那么sed -E 's_^[/](.*)_\1_'
应该完成这项工作:
$ echo "$var1"; echo "$var2"
/foo/bar/hah
foo/bar/hah
$ echo "$var1" | sed -E 's_^[/](.*)_\1_'
foo/bar/hah
$ echo "$var2" | sed -E 's_^[/](.*)_\1_'
foo/bar/hah
如果您还需要在行的开头替换其他字符,请将其添加到[/]
类。例如,如果您需要替换/
或-
,则会sed -E 's_^[/-](.*)_\1_'
答案 6 :(得分:1)
以下是awk
版本:
echo "/foo/bar/hah/" | awk '{gsub(/^\/|\/$/,"")}1'
foo/bar/hah