使用 \1 保留部分模式 Bash



我有一个 21 列的 csv 文件。我正在处理第二列。我想删除/删除数字的第一部分,下划线之前的部分。并保留其余值。

示例数据集(前三列(

page_name      post_id                        page_id
A              86680728811_272953252761568    86680728811   
A              86680728811_273859942672742    86680728811
B              86680728033_281125741936891    86680728033
B              86680728033_10150500662053812  86680728033

期望的输出

page_name      post_id                        page_id
A              272953252761568                86680728811   
A              273859942672742                86680728811
B              281125741936891                86680728033
B              10150500662053812              86680728033

我尝试使用 \1 方法和正则表达式来删除我不想要的部分并保留字符串的其余部分。

cat FB_Data.csv | LC_ALL=c sed -Ee 's/.*D(post_id)/1post_id/' -e 's/_/,/'

但是由于未知原因,此方法拆分了第一列的标题,并添加了一个名为"name"的新列,其值为 page_id。

我也尝试了带有awk的sub,但它不起作用

awk -v "OFS=," '{$2=$2;sub(/[0-9]*_/, $2, $2);  print}' FB_Data.csv>output.csv

任何提示都会有所帮助。我已经被困了两天,试图解决这个问题。谢谢

使用 awk,sub直接修改目标(第三个参数(,如下所示:

awk '
{ 
sub("[0-9]+_","",$2);
print
}' FBdata.csv

最新更新