如何用固定字符串替换部分路径?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用固定字符串替换部分路径?相关的知识,希望对你有一定的参考价值。

我想从一行中的路径字符串稍微改变目录名称。 例如,如果给定字符串是 './dir1/dir2/dir3/xxx.txt'

我想要 './dir1/fix_string_as_suffix'

我想将它与下面的find命令结合使用,虽然还没有修复。

find . -type d ( -name 'vendor' ) -prune -o -type f -name '*.txt' -print | cut -d'/' -f1,2
答案

你可以使用sed

s='./dir1/dir2/dir3/xxx.txt'
sed -E 's~^(([^/]*/){2}).*~1~' <<< "$s"

./dir1/
另一答案

使用IFS和printf内置

根据您是否要使用cut,sed或awk之类的标准实用程序,或者您希望将自己限制在shell本身内部的扩展和内置,可以有多种方法在shell中执行您想要的操作。一种方法是将路径拆分为组件,然后使用printf命令或内置组件重新加入它们。例如:

path='./dir1/dir2/dir3/xxx.txt'

IFS='/' read -ra dirs <<< "$path"
printf '%s' "${dirs[0]}/" "${dirs[1]}/" "..." $'
'

如果要将其转换为单行,请使用分号和/或使用curly braces for command grouping连接命令。但是,可读性胜过简洁,特别是在shell编程中。

另一答案

使用cut命令:

#!/bin/bash

path="./dir1/dir2/dir3/xxx.txt"
suffix="something fixed string"
prefix=`echo $path | cut -d/ -f1,2`
echo "$prefix/$suffix"

使用;连接上面的行以使其在一行上:

prefix=`echo $path | cut -d/ -f1,2` ; echo "$prefix/$suffix"
另一答案

我认为这就是你要找的东西

find . -type d ( -name 'vendor' ) -prune -o -type f -name '*.txt' -exec sh -c 'echo "${1%/*}/fix_string_as_suffix"' fstrasuff {} ;
另一答案

实际上,我最终如下。

find . -type d ( -name 'vendor' ) -prune -o -type f -name '*.txt' -print | cut -d'/' -f1,2 | uniq | awk '{print $1"/..."}'

以上是关于如何用固定字符串替换部分路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何用 ViewPager 中的另一个片段替换 Android 片段?

如何用 Android 数据绑定替换 androidx.fragment.app.FragmentContainerView 中的片段

Android - 如何用另一个字符串替换部分字符串?

如何用bat删除和替换txt文本中的指定字符串,如把“我”换成“你”和把“我”删除? 请勿灌水!!

如何用模式(正则表达式)替换字符串的一部分在数据框中抛出行

JS如何用正则表达式 获取字符串内的匹配部份?