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 необходим в качестве тестера и, к сожалению, "если" не вариант.

28
задан JakeGould
20.05.2023 10:54 Количество просмотров материала 2723
Распечатать страницу

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 2023-05-21 18:42

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 2023-05-21 20:59

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

bash
grep
linux
sed
shell-script
Вверх