Shell:echo 多字符串

Shell:echo 多字符串

假设我有这样的字符串:

/somefolder/andsubfolder/my_first_text.txt
/somefolder/andsubfolder/my_second_text.txt

我想创建一个循环来回应

my_first_text
my_second_text

经过一番研究,我发现该cut命令无法做到这一点。我认为这awk可能是一个选择,但我并不完全了解如何让它在这个例子中正常工作……所以任何帮助都将不胜感激。

答案1

我认为最简单的方法是使用字符串运算符.例如,如果:

str="/somefolder/andsubfolder/my_first_text.txt"

然后你可以使用类似这样的 somethink:

str=${str##*/}
echo ${str%.txt}

但是,您仍然可以借助cutrev请参阅man cutman rev了解更多信息):

echo $str | rev | cut -d/ -f1 | cut -d. -f 2- | rev

解决方案awk如下:

echo $str | awk -F/ '{print $NF}' | awk -F. '{$NF=""}1'

答案2

为了避免使用任何外部程序(如 cut 或 awk),你可以使用 bash 字符串运算符进行连接,例如 if str="/somefolder/andsubfolder"then

str="${str##*/}"; echo "${str%.txt}"

首先删除前导路径组件(最长前缀匹配*/),然后删除.txt后缀(最短后缀匹配*.txt

你也可以这样做

str="${str##*/}"; echo "${str%.*}"

删除任何单个.*后缀,而不仅仅是.txt

答案3

尝试一下这个脚本

#!/bin/bash

abc=/somefolder/andsubfolder/my_first_text.txt
my_file=$(echo $abc | awk -F/ '{print $4}')
echo "$my_file"

这肯定会对你有帮助。

相关内容