如何在模式"使用SED"之前插入字符串或换行符(不替换模式)在MAC OS中

sam*_*sam 7 macos bash shell sed

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

aaaabbaaabbaa
Run Code Online (Sandbox Code Playgroud)

我需要一个输出,如:

aaaa
bbaaa
bbaa
Run Code Online (Sandbox Code Playgroud)

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

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

任何人都可以告诉我一个比这更好的命令.Pl注意我只需要在bash中使用SED命令

sed -i.bak  -e 's/bb/qbb/g' input.txt  
sed -i.bak  -e 's/qbb/\'$'\nbb/g' input.txt
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 9

sed:

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

sed -r允许捕捉块并用()它们打印回来\1.它抓住它的块[b]+,意思是"one or more b's",并在它之前打印一个新行.

正如我所看到你正在使用的那样sed -i,这样做也很好:

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

此外,更容易(感谢格伦杰克曼!)

$ echo "aaaabbaaabbaa" | sed 's/b\+/\n&/g'
aaaa
bbaaa
bbaa
Run Code Online (Sandbox Code Playgroud)

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

  • 不要严格要求`-r`:`sed's/b\+/\n&/ g'` (2认同)

anu*_*ava 3

grep -oP使用前瞻正则表达式会更容易:

echo 'aaaabbaaabbaa' | grep -oP '.+?[^b](?=(b|$))'

aaaa
bbaaa
bbaa
Run Code Online (Sandbox Code Playgroud)