![Передача вывода последней команды в sed в качестве аргумента](https://rvso.com/image/1259749/%D0%9F%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B5%D0%B9%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B%20%D0%B2%20sed%20%D0%B2%20%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B5%20%D0%B0%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0.png)
В принципе, я хочу автоматизировать добавление чего-либо в xorg.conf в нужном месте, я использовал несколько команд, чтобы получить номер строки, которую я хочу изменить, но я не совсем уверен, как передать этот номер строки (как аргумент, а НЕ что-то, что можно изменить) в sed. Мне рассказали о xargs, и я посмотрел документацию по нему, но после некоторого чтения и экспериментов я, похоже, не могу заставить его работать.
Если кто-то может придумать лучший метод, то процесс, который я хочу автоматизировать, заключается в том, чтобы просто найти строку, содержащую как "Identifier", так и "Monitor0" (будет только одна) и добавить строку под ней. Проблема с простым поиском Monitor0 и манипулированием этой строкой заключается в том, что естьнескольколинии с Monitor0 в.
Я зашел так далеко:
fgrep -n "Monitor0" </etc/X11/xorg.conf | fgrep "Identifier" | cut -f1 -d:
Это выдает номер строки, который я хочу передать в sed, но я не совсем уверен, как это сделать.
...или есть более простой способ, которого я не вижу?
решение1
Я могу придумать фреймворк для реализации этого в скрипте Perl, но у меня нет опыта работы с sed, поэтому вам придется разобраться в деталях.
Напишите скрипт Perl, который сначала идентифицирует строку (а не номер строки), в которую нужно добавить что-то. (Что-то вроде: $line = system("fgrep -n ..."); ) Затем запустите sed следующим образом: sed s/$line/$line.'\n'.$linetoadd/ <$oldfile >$newfile
.
решение2
Разобрался (спасибо #cogs на SynIRC), решение этой конкретной проблемы следующее:
sed '/\bIdentifier\b.*\bMonitor0\b/ a\\tOption "NoDDC"'