7

标题已经说明了:

我想使用一些 linux one liner(例如 sed)

改造

Anytext
{

进入

Anytext{

这可以使用 sed 完成,或者如果不使用 sed 则使用 awk one liner 来完成?

4

5 回答 5

7

当然,

sed 'N;s/\n{/{/'

或者更彻底的版本:

sed ':r;$!{N;br};s/\n{/{/g'

在这里,:r设置一个标签,我们可以参考它来创建一个循环;

$!{...}对除最后一行之外的每一行执行给定的命令集;

N;br是在循环中执行的两个命令:N将新行附加到模式空间,然后br分支回到 label r,完成循环。

然后,当您运行最终命令时,您的所有文件都在模式空间中:

s/\n{/{/g

如果您尝试使用类似的方法,您可以看到这两种方法之间的区别

Anytext
{
{
{
于 2012-08-26T11:53:45.360 回答
2

一种使用方式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{
于 2012-08-26T12:02:13.417 回答
1

如果打算从\n{序列中删除换行符bbe似乎是最简单的工具:

bbe -e 's/\n{/{/' infile
于 2012-08-26T12:07:59.077 回答
1

这可能对您有用(GNU sed):

sed ':a;$!{N;/.*\n{/ba};s/\n{/{/g;P;D' file
于 2012-08-26T12:32:34.110 回答
1

使用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{
于 2013-12-04T08:14:20.433 回答