Bash 得到最后一句
Bash get last sentence in line
假设,我们得到以下包含字符串的变量:
text="All of this is one line. But it consists of multiple sentences. Those are separated by dots. I'd like to get this sentence."
我现在需要最后一句话"I'd like to get this sentence."。我尝试使用 sed:
echo "$text" | sed 's/.*\.*\.//'
我认为它会删除模式 .*.
之前的所有内容。它没有。
这里有什么问题?我相信这可以很快解决,不幸的是我没有找到任何解决方案。
使用 awk 你可以做到:
awk -F '\. *' '{print $(NF-1) "."}' <<< "$text"
I'd like to get this sentence.
使用 sed:
sed -E 's/.*\.([^.]+\.)$//' <<< "$text"
I'd like to get this sentence.
不要忘记内置的
echo "${text##*. }"
这需要在句号后添加一个 space,但如果您不想这样做,该模式很容易适应。
至于你失败的尝试,正则表达式看起来不错,但很奇怪。模式 \.*\.
查找零个或多个字面句点后跟一个字面句点,即有效的一个或多个句点字符。
假设,我们得到以下包含字符串的变量:
text="All of this is one line. But it consists of multiple sentences. Those are separated by dots. I'd like to get this sentence."
我现在需要最后一句话"I'd like to get this sentence."。我尝试使用 sed:
echo "$text" | sed 's/.*\.*\.//'
我认为它会删除模式 .*.
之前的所有内容。它没有。
这里有什么问题?我相信这可以很快解决,不幸的是我没有找到任何解决方案。
使用 awk 你可以做到:
awk -F '\. *' '{print $(NF-1) "."}' <<< "$text"
I'd like to get this sentence.
使用 sed:
sed -E 's/.*\.([^.]+\.)$//' <<< "$text"
I'd like to get this sentence.
不要忘记内置的
echo "${text##*. }"
这需要在句号后添加一个 space,但如果您不想这样做,该模式很容易适应。
至于你失败的尝试,正则表达式看起来不错,但很奇怪。模式 \.*\.
查找零个或多个字面句点后跟一个字面句点,即有效的一个或多个句点字符。