【问题标题】:How to append or prepend a path string in a text file using sed如何使用 sed 在文本文件中追加或前置路径字符串
【发布时间】:2021-12-30 17:20:33
【问题描述】:

假设我有一个文本文件,即 files.txt。 在 files.txt 我有一个路径列表,例如:

/home/user/qwe
/home/user/asd
/home/user/zxc

我希望能够将一行移到另一行,例如:

/home/user/asd
/home/user/qwe
/home/user/zxc

我已经尝试使用这些命令来做到这一点。第一个有效。但是由于正斜杠,第二个不起作用:

sed -i "2d" /home/user/files.txt
sed -i "/^'/home/user/asd'/i '/home/user/qwe/'" /home/user/files.txt

我尝试使用带单引号的临时变量来表示文字字符串,但它仍然不起作用(实际上是使用变量来使用)。此外,我尝试使用任意字符来替换正斜杠,因为 sed 在某些情况下并不关心,但这次不同。 我如何能够使用 sed 实现这一目标?

【问题讨论】:

  • 这能回答你的问题吗? How can I swap two lines using sed?
  • @dawg 不,我不想交换两行。我希望更换线路下降。
  • 您是否总是使用文件中的前 2 行?还是基于行的内容的“运动”(例如,qwe vs asd)?
  • @markp-fuso “移动”实际上是基于行号,不,我不仅在处理文件中的前两行。

标签: linux bash sed


【解决方案1】:

使用 sed 的模式空间和保持空间:

sed '1{h;d}; 2{p;x}' file

输出:

/home/用户/asd /home/user/qwe /home/user/zxc

见:man sed

【讨论】:

  • 哪个可以'/qwe/{h;d}; /asd/{p;x}'按模式而不是行号切换。
  • 如果您想按行号向任何方向移动行,awk 是您的最佳选择。使用sed,您将只能使用以前看到的一行。
【解决方案2】:

你可以这样试试

sed -i 's|/home/user/asd|/home/user/qwe|g' /home/user/files.txt

【讨论】:

    猜你喜欢
    • 2013-12-05
    • 2019-01-20
    • 2014-07-20
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2010-11-08
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多