在字段值前加上字母
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
我有一个文件 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