缩短字符串

缩短字符串

我正在编写一个脚本来读取.txt文件并将结果存储在某处。

我需要缩短表达式:

str1/str2/str3/str4/str5

我只需要只str5就是上面的内容。

我正在循环中逐行读取该文件while

如何缩短此类字符串?

答案1

basename实用程序将返回路径名的文件名部分。如果我们将您的字符串视为路径名,它将返回str5

string=str1/str2/str3/str4/str5
basename -- "$string"

以上输出str5。即使$string包含嵌入的换行符或以以下内容开头,这也可以工作-

string='-str1/str2/str3/str
4/str5'
basename -- "$string"

将结果存储basename在变量中是通过普通命令替换完成的:

newstring=$( basename -- "$string" )

命令替换带子全部尾随换行符:作为行分隔符输出的字符basename,但也包括所有恰好位于 末尾的换行符$string

使用${var##pattern}POSIX shell 的操作符可以避免这种情况(并且还可以节省分叉进程并执行单独的命令):

string='very/
strange
file name

'
newstring=${string##*/}

但会给$strings 提供不同的值,例如//some/dir/

答案2

这对你有用吗?

string="str1/str2/str3/str4/str5"

echo $string | awk -F'/' '{print $5}'

-F 用于指定分隔符

答案3

当您在 while 循环中读取文件时,您可以...

while IFS='/' read -r one two three four five junk; do
  echo "$five"
done < yourfile

或者你可以使用cut

cut -d'/' -f5 yourfile

答案4

您可以使用简单的替换:

echo ${string##*/}

例如

string="str1/str2/str3/str4/str5"
echo ${string##*/}

将给出输出str5。如果字符串有换行符,它也将起作用。

如果您有可变大小的字符串,即您不知道/字符串包含多少个,它也将起作用。

相关内容