在字段值前加上字母

Prepending letter to field value

我有一个文件 0.txt,在括号中包含以下值字段内容:

(bread,milk,),
(rice,brand B,),
(pan,eggs,Brandc,),

我正在 OS 和其他地方寻找如何将字母 x 添加到逗号之间的每个值的开头,以便我的输出文件变为(使用 bash unix ):

(xbread,xmilk,),
(xrice,xbrand B,),
(xpan,xeggs,xBrand C,),

我唯一真正尝试过但还不够的是:

awk '{gsub(/,/,",x");print}' 0.txt

出于所有目的,不应将前缀应用于每行末尾的最后一个逗号。

awk

awk 'BEGIN{FS=OFS=","}{="(x"substr(,2);for(i=2;i<=NF-2;i++){$i="x"$i}}1'

解释:

# Before you start, set the input and output delimiter
BEGIN{
   FS=OFS=","
}

# The first field is special, the x has to be inserted
# after the opening (
="(x"substr(,2)


# Prepend 'x' from field 2 until the previous to last field
for(i=2;i<=NF-2;i++){
    $i="x"$i
}

# 1 is always true. awk will print in that case
1 

诀窍是锚定正则表达式,使其匹配您要使用的整个以逗号结尾的子字符串,而不仅仅是逗号(并避免语法中的其他“特殊”字符)。

awk '{ gsub(/[^,()]+,/, "x&") } 1' 0.txt
sed -r 's/([^,()]+,)/x/g' 0.txt