我正在尝试删除Bash中路径字符串中specific_string
之后的所有内容。到目前为止,我尝试使用sed
无效。
variable="specific_string"
input_string="/path/to/some/specific_string/specific_string.something/specific_string.something-else"
output=$(sed 's/$variable//' $input_string)
输出应为"/path/to/some/specific_string/"
如果我不必使用sed
等命令,那会更好。
答案 0 :(得分:2)
有很多问题
变量不在单引号内评估。 's/$variable//'
将被视为文字字符串,不包含specific_string
sed
可以修改文件或STDIN中的文本,但不能修改通过参数给出的文本。使用sed 's/...//' $input_string
,/path/to/some/specific_string/.../file
会被打开并且会读取其内容,而不是路径本身。
s/string//
仅删除 string
,而不删除之后的字词。
还记得加倍引用你的变量。如果变量包含空格,则cmd $variable
是危险的。 cmd "$variable"
是安全的。
output="$(sed "s/$variable.*/$variable/" <<< "$input_string")"
output="$(grep -Po "^.*?$variable" <<< "$input_string")"
output="${input_string%%$variable*}$variable"
答案 1 :(得分:1)
如果要删除“specific_string”之后的所有内容,它将删除“/”,就像使用以下示例一样:
output=$(echo $input_string|sed "s/${variable}.*$/${variable}/")
答案 2 :(得分:1)
尝试使用简单的sed:
variable="specific_string"
input_string="/path/to/some/specific_string/specific_string.something/specific_string.something-else"
output=$(echo "$input_string" | sed "s/\(.*$variable\/\).*/\1/")
可变输出的输出如下。
echo $output
/path/to/some/specific_string/