标题已经说明了:
我想使用一些 linux one liner(例如 sed)
改造
Anytext
{
进入
Anytext{
这可以使用 sed 完成,或者如果不使用 sed 则使用 awk one liner 来完成?
当然,
sed 'N;s/\n{/{/'
或者更彻底的版本:
sed ':r;$!{N;br};s/\n{/{/g'
在这里,:r
设置一个标签,我们可以参考它来创建一个循环;
$!{...}
对除最后一行之外的每一行执行给定的命令集;
N;br
是在循环中执行的两个命令:N
将新行附加到模式空间,然后br
分支回到 label r
,完成循环。
然后,当您运行最终命令时,您的所有文件都在模式空间中:
s/\n{/{/g
如果您尝试使用类似的方法,您可以看到这两种方法之间的区别
Anytext
{
{
{
一种使用方式sed
:
sed -ne '$! N; /^.*\n{/ { s/\n//; p; b }; $ { p; q }; P; D' infile
一个测试。假设infile
内容:
one
Anytext
{
two
three
{
four
five
{
输出将是:
one
Anytext{
two
three{
four
five{
如果打算从\n{
序列中删除换行符bbe
似乎是最简单的工具:
bbe -e 's/\n{/{/' infile
这可能对您有用(GNU sed):
sed ':a;$!{N;/.*\n{/ba};s/\n{/{/g;P;D' file
使用awk
cat file
one
Anytext
{
two
three
{
four
five
{
awk '{printf (!/^{/&&NR>1?RS:x)"%s",$0} END {print ""}' file
one
Anytext{
two
three{
four
five{