【问题标题】:Unix shell script to remove new lines preceded with specific characters用于删除以特定字符开头的新行的 Unix shell 脚本
【发布时间】:2016-04-07 12:24:01
【问题描述】:

首先,提前感谢您的帮助。

当 unix 文件中的新行 (\n) 没有以';'开头时,我需要用空格替换它们。

例如,如果您在 unix 文件中有类似的内容:

TestFields;TestFields2
;TestFields3;TestFields4

输出应该是:

TestFields;TestFields2 ;TestFields3;TestFields4

所以我正在使用这样的 sed 命令:

sed ':a;N;$!ba;s/[^;]\n/ /g'

问题是这个命令也会替换 \n 之前的字符,所以我的输出是这样的:

TestFields;TestFields ;TestFields3;TestFields4

我松开了“TestFields2”中的“2”.. 有人知道如何保留我的角色但替换 \n ?

【问题讨论】:

  • sed ':a;N;$!ba;s/\([^;]\)\n/\1 /g'

标签: shell unix sed newline lf


【解决方案1】:

捕获匹配的字符并用于替换

$ sed -r ':a;N;$!ba;s/([^;])\n/\1 /g' file
TestFields;TestFields2 ;TestFields3;TestFields4

g 后缀可能不需要。

【讨论】:

  • 当你可以使这个便携时,不需要使用 ERE。
  • 谢谢!它正在工作,(将在启用时给出您的答案)
【解决方案2】:

这可能对你有用(GNU sed):

sed ':a;N;/;\n/!s/\n/ /;ta;P;D' file

另一种方法是将整个文件放入内存并在读取问题时读取,即如果换行符之前的字符是;,则不执行任何操作,否则将换行符替换为空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 2022-11-28
    相关资源
    最近更新 更多