将最后一个命令的输出传递给sed作为参数


1

基本上,我想在正确的位置自动添加一些东西到xorg.conf,我已经使用了一些命令来获取我想要操作的行的行号,但我不确定如何去传递这个行号(作为参数而不是被操纵的东西)来sed。我被告知xargs并查看了它上面的文档,但经过一些阅读和实验后,我似乎无法让它工作。

如果任何人都可以完全想到一个更好的方法,我想要自动化的过程只是找到包含“Identifier”和“Monitor0”的行(只有一个)并在其下面添加一行。只是找到Monitor0并操纵该行的问题就是存在 Monitor0中的行。

我到目前为止:

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

这给出了我想要传递给sed的行号,但我不确定该怎么做。

......还是有一种我没见过的简单方法?

Answers:


0

我可以想一个在perl脚本中执行此操作的框架,但我没有sed的经验,所以你必须采取细节的核心。

编写一个perl脚本,它首先标识您必须追加的行(不是行号)。 (类似于:$ line = system(“fgrep -n ...”);) 然后像这样运行sed: sed s/$line/$line.'\n'.$linetoadd/ <$oldfile >$newfile


可悲的是,我不知道perl足够自信地做到这一点,我宁愿把它作为一个命令。我确信它可以用xargs完成,我只是没有足够的经验来解决问题。
Matthieu Cartier

0

对它进行排序(感谢SynIRC上的#cogs),针对此特定问题的解决方案如下:

sed '/\bIdentifier\b.*\bMonitor0\b/ a\\tOption "NoDDC"'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.