在bash脚本中,我试图删除文件名中的目录名称:
documents/file.txt
direc/file5.txt
file2.txt
file3.txt
因此,我尝试首先查看是否存在“ /”,如果是,请删除之前的所有内容:
for i in **/*.scss *.scss; do
echo "$i" | sed -n '^/.*\// s/^.*\///p'
done
但是它不适用于当前目录中的文件,它给了我一个空白字符串。
我明白了:
file.txt
file5.txt
答案 0 :(得分:2)
答案 1 :(得分:0)
这也可以使用awk
bash util。
示例:
echo "1/2/i.py" | awk 'BEGIN {FS="/"} {print $NF}'
output: i.py
答案 2 :(得分:0)
您的sed
尝试基本上可以,但是无论您是否进行替换,都应打印。最后取出-n
和p
。 (也有不相关的语法错误。)
此外,不要不必要地循环遍历所有文件。
printf '%s\n' **/*.scss *.scss |
sed -n 's%^.*/%%p'
答案 3 :(得分:-1)
最终,我做到了:
for i in **/*.scss *.scss; do
# for i in *.scss; do
# for i in _hm-globals.scss; do
name=${i##*/} # remove dir name
name=${name%.scss} # remove extension
name=`echo "$name" | sed -n "s/^_hm-//p"` # remove _hm-
if [[ $name = *"."* ]]; then
name=`echo "$name" | sed -n 's/\./-/p'` #replace . to --
fi
echo "$name" >&2
done