Unix 中的逐行修改

rob*_*lob 3 find text

我正在寻找一种方法来使用 UNIX 中的管道分隔文件对每一行执行以下操作,但不确定从哪里开始:

  1. 在一行文本中查找字符(假设使用 GREP?)
  2. 如果找到,则在该行的末尾添加一些文本(使用 SED?)
  3. 如果未找到,则在同一行中查找另一个字符
  4. 如果发现在行尾添加文本,否则什么都不做
  5. 循环查找文件中的所有行

任何指针将不胜感激。

Phi*_*pos 6

这就是全部sed工作,您不需要额外的工具:

假设你要添加foo的含线的末端f,并bar在没有行结束f,但有b

sed '/f/{
  s/$/foo/
  b
  }
/b/s/$/bar/'
Run Code Online (Sandbox Code Playgroud)

您可以使用 来“寻址”行/pattern/,因此仅当它们包含模式时才会执行以下命令。因此,在示例中,只有包含f触发器的行才会执行s替换和b(将{}命令分组,因此仅当地址匹配时才应用里面的所有内容。b分支到脚本末尾以避免为 a 附加另一个字符串匹配b.

没有分支的不同方法:

sed '/f/s/$/foo/;s/^[^f]*b[^f]*$/&bar/'
Run Code Online (Sandbox Code Playgroud)

作为练习,您可以通过一些sed知识自己解决这个问题,man sed必要时使用。