【问题标题】:Replace newline with string in sed on mac在mac上用sed中的字符串替换换行符
【发布时间】:2014-09-16 12:09:28
【问题描述】:

在文件中,我需要用字符串替换所有换行符(不是转义序列 '\n',而是实际的换行符)。我在 SO 上发现的所有问题都是相反的;即用文字换行符替换字符串。这是在 Mac 上。

我已经尝试了以下

sed -i '' 's/\
/STOP/g' file.txt

但它给了我一个“未终止的替代模式”错误。

【问题讨论】:

  • sed 行没有换行符,因为 sed 逐行工作。您应该加载多行(N、h/H g/x、...)以使用多行。您的 sed 操作是正确的,请尝试使用双引号或 -e 's/\n/STOP/g'`

标签: regex macos sed


【解决方案1】:

虽然也可以使用 sed 完成,但使用 awk 执行此操作要简单得多:

awk -v ORS='STOP' '1' file

这会将输出记录分隔符更改为STOP,而不是默认的\n

更新:这是在 OSX 上执行相同操作的 sed 版本:

sed -i.bak -n -e 'H;${x;s/\n/STOP/g;p;}' file

【讨论】:

  • 这只是将文件输出到命令行而不更改实际文件。如何保存对文件的编辑?
  • 对于 awk,您可以:awk -v ORS='STOP' '1' file > _tmp && mv _tmp filesed 将进行内联编辑。
  • 酷!你能快速解释一下sed版本吗?我以前从未见过在 sed 中使用过的 H;${x;;p;}
  • -n 将抑制默认输出。 H - 将换行符后跟模式空间的内容附加到保留空间。 x - 交换模式的内容并保留空格。 g - 将模式空间的内容替换为保持空间的内容。 p - 将模式空间写入标准输出。而${...} 表示仅在最后一行执行该块。
猜你喜欢
  • 1970-01-01
  • 2012-02-17
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2020-07-28
  • 2012-10-09
  • 2020-03-13
相关资源
最近更新 更多