如何从文件的第2列中删除部分字符串

如何从文件的第2列中删除部分字符串

输入 :

4857544398A7CB9C(HWTC98A7CB9C); AHH-ABN-19-2-59-0720000000-amir3456; 129

期望的输出:

4857544398A7CB9C(HWTC98A7CB9C),amirzain,129

我想-使用sed或 任何命令删除第 2 列中最后一个连字符 ( ) 之前的所有内容。

答案1

如果您确实想要您的问题所要求的内容:“我想删除第 2 列中最后一个连字符 (-) 之前的所有内容”,您可以使用以下命令:

$ awk '{sub(/.*-/,"",$2)}1' file
4857544398A7CB9C(HWTC98A7CB9C); amirzain; 129

如果您想要显示的输出,这意味着删除第 2 列中最后一个连字符之前的所有内容,更改amirzainAmirzain并将分号更改为冒号,您可以使用以下命令:

$ perl -lne '@F=split(/; /); $F[1] =~s/^.+-(.)/\U$1/; print join ",",@F' file
4857544398A7CB9C(HWTC98A7CB9C),Amirzain,129

答案2

使用awk:

awk 'BEGIN{FS=";";OFS=","}{n=split($2, seq, "-");$2=seq[n];print}' <file>

输出 :

4857544398A7CB9C(HWTC98A7CB9C),amirzain, 129

答案3

假设A第二列中的大写字母是偶然的,并且输出中,的替代是故意的:;

echo '4857544398A7CB9C(HWTC98A7CB9C); AHH-ABN-19-2-59-0720000000-amirzain; 129'|sed -r 's/^([^;]+); .*-([^;]+); (.*)/\1,\2,\3/' 
4857544398A7CB9C(HWTC98A7CB9C),amirzain,129

如果您想在整个文件上使用它,请将 a 添加i到 sed 的标志中:

sed -ri 's/^([^;]+); .*-([^;]+); (.*)/\1,\2,\3/' file

相关内容