简体   繁体   中英

Finding and replacing the last space at or before nth character works with sed but not awk, what am I doing wrong?

I have a string in a test.csv file like this:

here is my string

when I use sed it works just as I expect:

cat test.csv | sed -r 's/^(.{1,9}) /\1,/g'
here is,my string

Then when I use awk it doesn't work and I'm not sure why:

cat test.csv | awk '{gsub(/^(.{1,9}) /,","); print}'
,my string

I need to use awk because once I get this figured out I will be selecting only one column to split into two columns with the added comma. I'm using extended regex with sed, "-r" and was wondering how or if it's supported with awk, but I don't know if that really is the problem or not.

awk does not support back references in gsub . If you are on GNU awk, then gensub can be used to do what you need.

echo "here is my string" | awk '{print gensub(/^(.{1,9}) /,"\\1,","G")}'
here is,my string

Note the use of double \\ inside the quoted replacement part. You can read more about gensub here .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM