请问,我想提取“.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)'
答案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
- 更多选项。