bash - 如何在模式 "Using SED"之前插入字符串或换行符(不替换模式)在 MAC OS

标签 bash macos shell sed

我有一个包含以下内容的文件:

aaaabbaaabbaa

我需要这样的输出:

aaaa
bbaaa
bbaa

我需要在第一次出现 'b' 之前添加一个新行。我只需要在 bash 中使用 SED 命令

我正在使用以下命令。我知道它现在是完美的..

谁能告诉我比这更好的命令。 请注意我只需要在 bash 中使用 SED 命令

sed -i.bak  -e 's/bb/qbb/g' input.txt  
sed -i.bak  -e 's/qbb/\'$'\nbb/g' input.txt

最佳答案

使用sed:

$ echo "aaaabbaaabbaa" | sed -r 's/([b]+)/\n\1/g'
aaaa
bbaaa
bbaa

sed -r 允许使用 () 捕获 block 并使用 \1 打印它们。它捕获 [b]+ 的 block ,意思是 “一个或多个 b's”,并在换行之前将其打印回来。

我看到您正在使用 sed -i,这样做也很好:

sed -i.bak -r 's/([b]+)/\n\1/g' input.txt

此外,更容易 ( thanks Glenn Jackman !)

$ echo "aaaabbaaabbaa" | sed 's/b\+/\n&/g'
aaaa
bbaaa
bbaa

它替换所有的“b”序列,并用一个换行符替换它,后跟相同的“b”序列(& 代表 s 左侧匹配的任何内容///).

关于bash - 如何在模式 "Using SED"之前插入字符串或换行符(不替换模式)在 MAC OS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19589970/

相关文章:

ios - 我们可以在 2012 年中期在 MacBook pro 上开发 ios 15 应用程序吗,我们可以获取开发者帐户以在旧 mac 上下载最新的 MacOS 和 Xcode 吗?

linux - 全局变量但仍然无法在 linux 中访问

linux - 在我的命令行中,为什么 echo $0 返回 "-"?

linux - 类似于linux上的goto

linux - 环境变量未在 bash 脚本中正确显示

linux - 终止 webpack-dev-server 后执行 bash

regex - 使用正则表达式的 JQ 搜索对象

json - jq : update json content when path is variable

xcode - 在 OS X Tableview 中显示的 Swift 核心数据

macos - zsh:可执行文件中的 CPU 类型错误:kubectl (macOS Big Sur)