Похожие вопросы

grep файл и передать выходные данные в sed и сохранить выходные данные sed в файле

содержание source.txt:

gold  green white black blue
yellow magenta brown 
tram kilo charlie tango

Привет всем! Мне нужно разгадать тайну.

Я пытаюсь запустить небольшой скрипт для grep файла source.txt, pipe grep вывод sed замените строку и сохраните ее в новом файле pol.txt

grep -l "gold" source.txt | xargs sed  's/green/red/' >  pol.txt

вместо единственной строки, хранящейся в pol.txt:

gold  red white black blue

Я у себя весь файл с строку Я заменил

gold  red white black blue
yellow magenta brown 
tram kilo charlie tango

когда я удалить вариант -l от команды grep у меня это и конечно ничего в пол.txt

sed: can't read gold: No such file or directory
sed: can't read green: No such file or directory
sed: can't read white: No such file or directory
sed: can't read black: No such file or directory
sed: can't read blue: No such file or directory

grep необходим в качестве тестера и, к сожалению, "если" не вариант.

5
задан JakeGould
источник

2 ответов

для выбора строки, содержащей gold из источника.TXT и заменить первое вхождение green С red:

$ sed  -n '/gold/{s/green/red/; p}' source.txt 
gold  red white black blue

сохранить в файл:

sed  -n '/gold/{s/green/red/; p}' source.txt  >pol.txt

как это работает

  • -n говорит sed не печатать строки, если мы явно не попросим его.

  • /gold/ выбирает строки, соответствующие регулярному выражению gold.

  • s/green/red/ выполняет замена

  • p печать.

использование awk

С той же логикой:

$ awk '/gold/{gsub(/green/, "red"); print}' source.txt 
gold  red white black blue

используя grep

если мы вынуждены по еще не объясненным причинам использовать grep-конвейер, то попробуйте:

$ grep -l --null "gold" source.txt | xargs -0 sed  -n '/gold/s/green/red/p'
gold  red white black blue
4
отвечен John1024 2016-07-21 00:44:47
источник

grep -l "gold" source.txt выводит source.txt Если файл содержит слово gold xargs sed 's/green/red/' будет работать sed 's/green/red/' source.txt и окончательное перенаправление сохраняет результат в выводе.

если я правильно понимаю ваши намерения, вам нужна следующая команда:

sed -n '/gold/s/green/red/p' source.txt > pol.txt

The /gold/ выбирает строки, соответствующие gold и s команда делает замену, которую вы хотите.

1
отвечен Satya Mishra 2016-07-20 21:22:56
источник

Другие вопросы bash grep linux sed shell-script