首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在读取文件时替换字符串

无法在读取文件时替换字符串
EN

Unix & Linux用户
提问于 2018-09-21 06:22:01
回答 2查看 120关注 0票数 1

final.txt看起来像:

代码语言:javascript
复制
build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping/camping.design
src/aura/camping/camping.design-meta.xml

代码是这样的:

代码语言:javascript
复制
if [ -e final.txt ]
then
    ARRAY=()
    while read CFILE
    do
        echo Analyzing file `basename $CFILE`
        case "$CFILE"
            in
            *.design) TYPENAME="AuraDefinitionBundle";;
            *) TYPENAME="UNKNOWN";;
        esac

        if [ "$TYPENAME" == "AuraDefinitionBundle" ]
        then
            if [ $(contains "${ARRAY[@]}" $(basename -- "$(dirname -- "$CFILE")")) != "y" ]
            then
                echo baseFile from new method cFile $CFILE
                CFILENAME="$CFILE"

                replace="src/aura/"$(basename -- "$(dirname -- "$CFILE")")
                echo checkChanges "${CFILENAME/$CFILENAME/"$replace"}"
                CFILE="${CFILENAME/$CFILENAME/"$replace"}"
                echo baseFile from after change method cFile $CFILE
            else
                continue
            fi
        fi
    done < final.txt
else
    echo Change file not found!

我可以在回声窗口看到:

代码语言:javascript
复制
 [exec] baseFile from new method cFile src/aura/camping/camping.design
 [exec] checkChanges src/aura/camping
 [exec] baseFile from after change method cFile src/aura/camping

但是文件没有改变,我甚至添加了sed命令,但是输出没有改变:

代码语言:javascript
复制
if [ $(contains "${ARRAY[@]}" $(basename -- "$(dirname -- "$CFILE")")) != "y" ]
then
    CFILENAME="$CFILE"
    ARRAY+=($(basename -- "$(dirname -- "$CFILE")"))
    replace="src/aura/"$(basename -- "$(dirname -- "$CFILE")")
    #CFILE="${CFILENAME/$CFILENAME/"$replace"}"
    sed -i 's/$CFILENAME/$replace/' final.txt
else
    continue
fi

Expected输入

代码语言:javascript
复制
build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping/camping.design
src/aura/camping/camping.design-meta.xml

Expected输出

代码语言:javascript
复制
build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping
src/aura/camping/camping.design-meta.xml
EN

回答 2

Unix & Linux用户

发布于 2018-09-21 11:59:36

我不确定我能不能理解你的逻辑,但是这个

代码语言:javascript
复制
awk '/\.design$/ {sub("/[^/]*$", "")} 1 ' file
build/create_changes.sh
build/create_changes.sh-meta.xml
src/aura/camping
src/aura/camping/camping.design-meta.xml

会产生期望的输出..。

票数 0
EN

Unix & Linux用户

发布于 2018-09-21 12:11:19

如果您只想删除以.design结尾的所有路径名的basename:

代码语言:javascript
复制
sed 's#/[^/]*\.design$##' final.txt

要执行就地编辑,请在上面的表达式中使用sed -i ( -i标志的工作方式略有不同,但这将适用于GNU sed )。

正则表达式/[^/]*\.design$匹配一个/,后面跟着任意数量的非/字符,以及行尾的文字字符串.design

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/470454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档