#bash #csv #replace #sed
#bash #csv #заменить #sed
Вопрос:
Я пытаюсь заменить содержимое поля csv на основе первого. Я попробовал что-то с sed — найдено в другом потоке — но я не могу получить правильный результат.
Пример :
57c5b4da8ef722a0d4b0bbd9727982d2;510;1020;20130410
4858ecf7bf221fd8a3792615d8008dd8;530;4050;20130412
Я хочу иметь возможность заменять содержимое поля на основе его номера и где первое поле содержит «57c5b4da8ef722a0d4b0bbd9727982d2».
Моя текущая строка sed работает только для последнего поля :
sed -i 's/(57c5b4da8ef722a0d4b0bbd9727982d2)(;.*;).*/1220130401/' myfile
Комментарии:
1. Пожалуйста, четко объясните вопрос. Если возможно, опубликуйте ожидаемый результат.
Ответ №1:
Я думаю, вы пытаетесь заменить третье и последнее поле (если ;
это разделитель) на число 20130401
,
$ sed 's/^(57c5b4da8ef722a0d4b0bbd9727982d2)(;[^;]*;).*$/1220130401/g' file
57c5b4da8ef722a0d4b0bbd9727982d2;510;20130401
4858ecf7bf221fd8a3792615d8008dd8;530;4050;20130412
Ответ №2:
Может ли это быть нормально?
awk -F; '$1=="57c5b4da8ef722a0d4b0bbd9727982d2" {$NF=220130401}1' OFS=; file
57c5b4da8ef722a0d4b0bbd9727982d2;510;1020;220130401
4858ecf7bf221fd8a3792615d8008dd8;530;4050;20130412
Если первое поле 57c5b4da8ef722a0d4b0bbd9727982d2
заменить последнее поле на 220130401
Ответ №3:
Это может сработать для вас (GNU sed):
sed 's/[^;]*/xxx/2' file
Это заменяет второе поле на xxx
.
Если вам нужно второе поле определенной строки, используйте:
sed '/57c5b4da8ef722a0d4b0bbd9727982d2/s/[^;]*/2' file