String 如何在bash中提取字符串的最后一部分?
我有一个变量:String 如何在bash中提取字符串的最后一部分?,string,bash,awk,String,Bash,Awk,我有一个变量: A="Some variable has value abc.123" 我需要提取此值,即abc.123。这在bash中可能吗?如何知道值从何处开始?如果总是第5和第6个单词,您可以使用例如: B=$(echo $A | cut -d ' ' -f 5-) 这将使用cut命令切掉部分行,使用一个简单的空格作为单词分隔符。如何知道值从何处开始?如果总是第5和第6个单词,您可以使用例如: B=$(echo $A | cut -d ' ' -f 5-) 这将使
A="Some variable has value abc.123"
我需要提取此值,即
abc.123
。这在bash中可能吗?如何知道值从何处开始?如果总是第5和第6个单词,您可以使用例如:
B=$(echo $A | cut -d ' ' -f 5-)
这将使用
cut
命令切掉部分行,使用一个简单的空格作为单词分隔符。如何知道值从何处开始?如果总是第5和第6个单词,您可以使用例如:
B=$(echo $A | cut -d ' ' -f 5-)
这将使用cut
命令切掉部分行,使用简单的空格作为单词分隔符。是;这:
A="Some variable has value abc.123"
echo "${A##* }"
将打印以下内容:
abc.123
abc.123
(中解释了${parameter###word}
符号)。是;这:
A="Some variable has value abc.123"
echo "${A##* }"
将打印以下内容:
abc.123
abc.123
(中解释了${parameter###word}
符号)。最简单的是
echo $A | awk '{print $NF}'
编辑:这是如何工作的解释
awk
将输入拆分为不同的字段,默认情况下使用空格作为分隔符。硬编码5
代替NF
打印输入中的第5个字段:
echo $A | awk '{print $5}'
NF
是一个内置的awk
变量,它给出当前记录中的字段总数。以下返回数字5,因为字符串中有5个字段“某些变量的值为abc.123”
:
将$
与NF
组合将输出字符串中的最后一个字段,无论字符串包含多少字段。最简单
echo $A | awk '{print $NF}'
编辑:这是如何工作的解释
awk
将输入拆分为不同的字段,默认情况下使用空格作为分隔符。硬编码5
代替NF
打印输入中的第5个字段:
echo $A | awk '{print $5}'
NF
是一个内置的awk
变量,它给出当前记录中的字段总数。以下返回数字5,因为字符串中有5个字段“某些变量的值为abc.123”
:
将
$
与NF
组合输出字符串中的最后一个字段,无论字符串包含多少字段。使用参数展开的一些示例
A="Some variable has value abc.123"
echo "${A##* }"
abc.123
“”空间上的最长匹配
世界上最长的比赛。圆点
echo "${A%.*}"
Some variable has value abc
“”空间上的最短匹配
阅读更多一些使用参数展开的示例
A="Some variable has value abc.123"
echo "${A##* }"
abc.123
“”空间上的最长匹配
世界上最长的比赛。圆点
echo "${A%.*}"
Some variable has value abc
“”空间上的最短匹配
阅读更多这本书读起来有点痛苦,所以我用一种更简单的方式总结了它
请注意,“*
”需要与“
”交换位置,具体取决于您是使用
还是%
。(由于*
只是一个通配符,因此您可能需要在阅读时摘掉“regex帽子”。)
-删除最短尾随${A%*}
(去掉最后一个单词)*
-删除最长的尾随${A%%*}
(去掉最后的单词)*
-删除最短的前导${A#*}
(去掉第一个单词)*
-删除最长的前导${A###*}
(去掉第一个单词)*
删除所有包含文件夹(例如${A##*/}
->/usr/bin/git
)git
删除最后一个扩展名(例如${A%.*}
->archive.tar.gz
)-请注意archive.tar
my.path/noext
- 这本书读起来有点痛苦,所以我用一种更简单的方式总结了它
请注意,“
*
”需要与“
”交换位置,具体取决于您是使用
还是%
。(由于*
只是一个通配符,因此您可能需要在阅读时摘掉“regex帽子”。)
-删除最短尾随${A%*}
(去掉最后一个单词)*
-删除最长的尾随${A%%*}
(去掉最后的单词)*
-删除最短的前导${A#*}
(去掉第一个单词)*
-删除最长的前导${A###*}
(去掉第一个单词)*
删除所有包含文件夹(例如${A##*/}
->/usr/bin/git
)git
删除最后一个扩展名(例如${A%.*}
->archive.tar.gz
)-请注意archive.tar
my.path/noext
正如Zedfoxus所指出的那样。一种非常干净的方法,适用于所有基于Unix的系统。此外,您不需要知道子字符串的确切位置
A="Some variable has value abc.123"
echo $A | rev | cut -d ' ' -f 1 | rev
# abc.123
正如Zedfoxus所指出的那样。一种非常干净的方法,适用于所有基于Unix的系统。此外,您不需要知道子字符串的确切位置
A="Some variable has value abc.123"
echo $A | rev | cut -d ' ' -f 1 | rev
# abc.123
这是命令行的最佳答案,我想知道为什么它不是更流行的“print NF”打印字数,$NF是最后一个字。这是命令行的最佳答案,我想知道为什么它不是更流行的“print NF”打印字数,$NF是最后一个字。谢谢!我到处寻找从字段x到字符串末尾的方法,但找不出
-f
字段列表的通配符,然后偶然发现这里使用了-
。我想是看了BSD下的cut
手册页面后得到的。谢谢!我到处寻找从字段x到字符串末尾的方法,但找不出通配符f