Как использовать sed для замены второго столбца в оболочке - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть file, который выглядит так:

1,2,3,4
5,6,7,8

Я хочу заменить 2-й столбец, содержащий от 6 до 89. Желаемый вывод:

1,2,3,4
5,89,7,8

Но если я наберу

index=2
cat file | sed 's/[^,]*/89/'$index

Я получаю

1,89,3,4
5,89,7,8

и если я наберу

index=2
cat file | sed 's/[^,]6/89/'$index

ничего не меняется. Почему это так? Как я могу это исправить? Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Поскольку вы хотите изменить второй столбец, содержащий 6, и у вас есть запятая в качестве разделителя полей, на самом деле очень просто с sed:

sed 's/^\([^,]*\),6,/\1,89,/`

Здесь мы используем обратную ссылку для запоминания первого столбца.

Если вы хотите заменить 6 в 5-м столбце, вы можете сделать что-то вроде:

sed 's/^\(\([^,]*,\)\{4\}\)6,/\189,/'

Однако гораздо удобнее использовать awk:

awk 'BEGIN{FS=OFS=","}($2==6){$2=89}1'
0 голосов
/ 13 ноября 2018

Я решил это с помощью awk

awk 'BEGIN{FS=OFS=","} {if ($2==6) $2=89}1' file >file1
...