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)
用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///).
grep -oP使用前瞻正则表达式会更容易:
echo 'aaaabbaaabbaa' | grep -oP '.+?[^b](?=(b|$))'
aaaa
bbaaa
bbaa
Run Code Online (Sandbox Code Playgroud)