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

VLC bash транскодирование сценарий вывода в файл
Почему я добавляю путь к~/.профиль bash и источник, но нет никакого эффекта?
Терминал Linux-замороженное обновление ввода, но может выполнять команды?
Как использовать терминал для входа на другой компьютер mac?
Проблемы редактирования файлов с nano в Bash / Windows 10
Как cd в smb://user@100.100.100.100 из терминала?
Создание сценария BASH " для " обрабатывать имена файлов с пробелами (или обходной путь)
Возможно ли иметь различную цветовую схему в ConEmu?
Как избежать "$ @ " в makefile?
Как запустить скрипт цикла for в фоновом режиме через удаленный хост с помощью ssh?
найти количество команд из файла [закрыт]
В чем разница между "Shell" и "Terminal"? [дубликат]
показать повторяющиеся данные с помощью awk print $2,$3,$4 в одной строке
Можно ли отображать текстовый файл в нескольких вертикальных областях?
Man-страницы для Git Bash в Windows 7

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