如何从另一个字符串中删除带有`/`的字符串的所有出现

时间:2019-03-25 14:24:04

标签: shell

我有一个看起来像这样的字符串:

X = model.addVar(vtype="GRB.BINARY", name = "x1")

这存储在以下脚本中的变量/mnt/blumeta0/db2/head/home/db2inst1/sqllib/ctrlha/ /mnt/blumeta0/db2/head/home/db2inst1/sqllib/ctrl/ /mnt/blumeta0/db2/head/home/db2inst1/sqllib/log/ /mnt/blumeta0/db2/head/home/db2inst1/sqllib/cfg/中:我正在尝试删除所有出现的前缀sqllib_files_folders(我写了以下内容的TMP_SOTRAGE):

/mnt/blumeta0/db2

这适用于没有#!/bin/sh TMP_STORAGE="/mnt/blumeta0/db2" METADATA_PATH="/head" sqllib_files_folders=$(find $TMP_STORAGE$METADATA_PATH/home/db2inst1/sqllib/ -maxdepth 1 -mindepth 1 '(' '(' -type d -printf '%p/ ' ')' -o -printf '%p ' ')') sqllib_files_folders=echo ${sqllib_files_folders//$TMP_STORAGE/} echo $sqllib_files_folders 的字符串。我尝试使用/进行转义。但这也不起作用。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

例如:

sqllib_files_folders=$(echo $sqllib_files_folders|sed "s%$TMP_STORAGE%%g")

答案 1 :(得分:1)

有两个想法:

    首先将
  1. cd cd到目录,所以前缀不出现在find输出中:

    sqllib_files_folders=$(cd "$TMP_STORAGE" && find ./"$METADATA_PATH"/home/db2inst1 ...)
    
  2. 反斜杠转义用于参数扩展替换的斜杠(这是一个很大的意思):

    sqllib_files_folders=${sqllib_files_folders//${TMP_STORAGE//\//\\/}/}
    # ...........................................^^...........^^^^^^^^^