7

タイトルはすでにそれを述べています:

Linuxのワンライナーを使いたい(例:sed)

変換するには

Anytext
{

の中へ

Anytext{

これはsedを使用して実行できますか、またはsedを使用しない場合は、awk oneライナーを使用して実行できますか?

4

5 に答える 5

7

もちろん、

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

またはより完全なバージョン:

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

ここで:rは、ループを作成するために参照できるラベルを設定します。

$!{...}最後の行を除くすべての行に対して、指定されたコマンドのセットを実行します。

N;brループ内で実行される2つのコマンドです。Nパターンスペースに新しい行を追加brし、ラベルrに分岐してループを完了します。

次に、最後のコマンドを実行すると、すべてのファイルがパターンスペースに配置されます。

s/\n{/{/g

次のような方法で試してみると、2つのアプローチの違いがわかります。

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

使用する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 に答える
1

これはうまくいくかもしれません(GNU sed):

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

意図が\n{シーケンスから改行を削除することである場合はbbe、使用する最も簡単なツールと思われます:

bbe -e 's/\n{/{/' infile
于 2012-08-26T12:07:59.077 に答える