删除特定字符

问题描述:

如何使用awk或任何命令删除' - '和' - '之前的字符?删除特定字符

XR-234|YYY|YYY|IR-567 
YYYY|GT-890|YYYY|YYYY 

OUTPUT:

234|YYY|YYY|567 
YYYY|890|YYYY|YYYY 

awk 'BEGIN{FS=OFS="|"}{for(i=1;i<=NF;i++) gsub(/^[^-]+-/,"",$i)}1' inputfile 

FSOFS被设置为 “|”在BEGIN块内。然后对每个字段进行更换和打印,使用gsub函数。

更简单,当使用sed

sed 's/[^|]\+-//g' inputfile 
+3

请注意'\ +'依赖于GNU sed - y你可以使用'\ {1,\}'或添加'-E'开关并使用'+'。 –

尝试在AWK太:

awk '{gsub(/[a-zA-Z]+-/,"")} 1' Input_file 

全球代字母,直到破折号( - )为NULL,然后在这里提INPUT_FILE。

使用sed

sed 's/[^|]*-//g' fil 
+0

尽管此代码可能回答这个问题,但提供有关如何解决问题和/或为何解决问题的其他上下文会提高答案的长期价值。 – Badacadabra

移除两个字符和破折号。

awk '{gsub(/..-/,"")}1' file 

234|YYY|YYY|567 
YYYY|890|YYYY|YYYY 
+0

尽管此代码可能会回答问题,但提供有关如何解决问题和/或为何解决问题的其他上下文可以提高答案的长期价值。 – Badacadabra

$ awk '{gsub(/[^|-]+-/,"")}1' file 
234|YYY|YYY|567 
YYYY|890|YYYY|YYYY 

使用Perl脚本语言,

#!/use/bin/Perl 
use warnings; 
use strict; 
while(<>){ 
    s/(\w)*-//; 
    print; 
} 

执行此脚本如下, perl的script.pl your_test_file

这使你的期望输出,

234|YYY|YYY|567 
YYYY|890|YYYY|YYYY