脚本 Shell 提取子字符串

脚本 Shell 提取子字符串

请问,我想提取“.fr”之前的字符串。以下是我的文件中的几行:

g-82.text.text1.fr.worker1
g-xx.yyyyyy.zzzz.fr.worker2

我想提取此文本:

g-82.text.text1
g-xx.yyyyyy.zzzz

请问,我在脚本 shell 中必须使用哪个命令?我使用的是 Ubuntu Trusty Tahr 14.04.1 LTS 发行版。

非常感谢。

此致。

答案1

您可以使用正向前瞻正则表达式:

echo "g-82.text.text1.fr.worker1" | grep -Po '.*(?=.fr)'
echo "g-xx.yyyyyy.zzzz.fr.worker2" | grep -Po '.*(?=.fr)'

文档在这里:http://www.rexegg.com/regex-lookarounds.html

答案2

使用sed命令。

sed 's/.fr.*//' file_name.txt

解释: sed.fr.*将从文件的每一行中删除与正则表达式匹配的部分,从而保留 之前的内容.fr

.fr.*意思是.fr.后面可以跟任意内容。

答案3

尝试
cut -d'.' -f-3 <file_name.txt

-d定义“字段分隔符”,
请将其放在'-引号内,因此它“对 bash 来说是安全的”(某些字符在 bash 中具有特殊含义,这是避免麻烦的手段)
这里的效果 -> 在.字符处拆分。

-f定义要保留哪些“字段”,=> -3=> 此处的效果:从一开始直到第三个字段的所有内容。

man cut- 更多选项。

相关内容