如何用固定字符串替换部分路径?
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 中的片段