Übergeben der Ausgabe des letzten Befehls als Argument an sed

Übergeben der Ausgabe des letzten Befehls als Argument an sed

Im Grunde möchte ich das Hinzufügen von etwas zu xorg.conf an der richtigen Stelle automatisieren. Ich habe einige Befehle verwendet, um die Zeilennummer der Zeile zu erhalten, die ich bearbeiten möchte, bin mir aber nicht wirklich sicher, wie ich diese Zeilennummer (als Argument und NICHT als zu bearbeitendes Objekt) an sed übergeben kann. Ich habe von xargs gehört und mir die Dokumentation dazu angesehen, aber nach einigem Lesen und Experimentieren kriege ich es anscheinend nicht zum Laufen.

Falls irgendjemand eine bessere Methode kennt, der Prozess, den ich automatisieren möchte, besteht darin, einfach die Zeile zu finden, die sowohl "Identifier" als auch "Monitor0" enthält (es wird nur eine geben) und eine Zeile darunter hinzuzufügen. Das Problem, wenn man einfach Monitor0 findet und diese Zeile manipuliert, ist, dass esmehrereZeilen mit Monitor0 in.

Ich bin so weit gekommen:

fgrep -n "Monitor0" </etc/X11/xorg.conf | fgrep "Identifier" | cut -f1 -d:

Dadurch wird die Zeilennummer ausgegeben, die ich an sed übergeben möchte, aber ich bin nicht ganz sicher, wie ich das machen soll.

... oder gibt es einen einfacheren Weg, den ich nicht sehe?

Antwort1

Ich kann mir ein Framework vorstellen, um dies in einem Perl-Skript zu tun, aber ich habe nicht so viel Erfahrung mit sed, daher müssten Sie sich um die Details kümmern.

Schreiben Sie ein Perl-Skript, das zuerst die Zeile (nicht die Zeilennummer) identifiziert, an die Sie anhängen müssen. (So etwas wie: $line = system("fgrep -n ..."); ) Führen Sie dann sed folgendermaßen aus: sed s/$line/$line.'\n'.$linetoadd/ <$oldfile >$newfile.

Antwort2

Habe es geklärt (danke #cogs auf SynIRC), die Lösung für dieses spezielle Problem lautet wie folgt:

sed '/\bIdentifier\b.*\bMonitor0\b/ a\\tOption "NoDDC"'

verwandte Informationen