タイトルはすでにそれを述べています:
Linuxのワンライナーを使いたい(例:sed)
変換するには
Anytext
{
の中へ
Anytext{
これはsedを使用して実行できますか、またはsedを使用しない場合は、awk oneライナーを使用して実行できますか?
もちろん、
sed 'N;s/\n{/{/'
またはより完全なバージョン:
sed ':r;$!{N;br};s/\n{/{/g'
ここで:r
は、ループを作成するために参照できるラベルを設定します。
$!{...}
最後の行を除くすべての行に対して、指定されたコマンドのセットを実行します。
N;br
ループ内で実行される2つのコマンドです。N
パターンスペースに新しい行を追加br
し、ラベルr
に分岐してループを完了します。
次に、最後のコマンドを実行すると、すべてのファイルがパターンスペースに配置されます。
s/\n{/{/g
次のような方法で試してみると、2つのアプローチの違いがわかります。
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{
使用する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{
これはうまくいくかもしれません(GNU sed):
sed ':a;$!{N;/.*\n{/ba};s/\n{/{/g;P;D' file
意図が\n{
シーケンスから改行を削除することである場合はbbe
、使用する最も簡単なツールと思われます:
bbe -e 's/\n{/{/' infile