我正在尝试仅使用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
答案 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