如何替换fixlength字母数字字符?

时间:2018-08-08 15:42:10

标签: sed

我正在尝试仅使用sed在固定长度的字母数字后替换String。

testing-1xs-a-2x-782b1x9.abc.txt
testing-12a-b-2y-486eee2.bcd.txt
testing-1a-c-2z-b62cx7d.cde.txt

我尝试了此命令-sed 's/[a-zA-Z0-9]{7}.*//g'文件

预期输出:

testing-1xs-a-2x
testing-12a-b-2y
testing-1a-c-2z

2 个答案:

答案 0 :(得分:1)

请您尝试以下。

awk --re-interval '{sub(/-[[:alnum:]]{7}.*/,"")} 1' Input_file

如果您的awk是新版本,则可以从上述代码中删除--re-interval

sed中,您可以尝试关注。

sed -E 's/-[[:alnum:]]{7}.*//'  Input_file

答案 1 :(得分:1)

$ sed -E 's/-[a-zA-Z0-9]{7}.*//g' ip.txt
testing-1xs-a-2x
testing-12a-b-2y
testing-1a-c-2z
  • {}在默认BRE中不是特殊的,因此请使用-E开关启用ERE(某些版本需要-r而不是-E
  • 在正则表达式开始时添加了缺少的-

对于给定的样本,您也可以使用这些样本,但是可能不适合您的实际用例。有关数据性质的更多详细信息将有助于决定使用哪个样本

$ sed 's/-[^-]*$//' ip.txt
testing-1xs-a-2x
testing-12a-b-2y
testing-1a-c-2z

$ cut -d- -f1-4 ip.txt
testing-1xs-a-2x
testing-12a-b-2y
testing-1a-c-2z