2

複数行にわたる情報を含むファイルがあります。プロパティを動作させる必要がある他の特定の bash スクリプトを使用するには、この情報をすべて 1 行にまとめる必要があります。ただし、ファイル内のすべての改行を削除したくないことは明らかです。

私がやりたいのは改行を置き換えることですが、STARTINGTOKEN と ENDINGTOKEN のすべてのペアの間でのみ、これら 2 つのトークンは常に異なる行にあります (ただし、ごちゃ混ぜになることはありません。たとえば、ENDINGTOKEN の前に 2 つの STARTINGTOKEN を連続させることは不可能です) )。

tr "\n" " " で改行を削除できること、また sed -e '/STARTINGTOKEN/,/ENDINGTOKEN/!d' で複数行のパターンを照合できることもわかりました

ただし、ファイルの残りの部分はそのままにして、これらの操作を組み合わせる方法がわかりません。

助言がありますか?

4

4 に答える 4

2

これを探していますか?

 awk '/STARTINGTOKEN/{f=1} /ENDINGTOKEN/{f=0} {if(f)printf "%s",$0;else print}' file

例:

kent$  cat file
foo
bar
STARTINGTOKEN xx
1
2
ENDINGTOKEN yy
3
4
STARTINGTOKEN mmm
5
6
7
nnn ENDINGTOKEN
8
9

kent$  awk '/STARTINGTOKEN/{f=1} /ENDINGTOKEN/{f=0} {if(f)printf "%s",$0;else print}' file
foo
bar
STARTINGTOKEN xx12ENDINGTOKEN yy
3
4
STARTINGTOKEN mmm567nnn ENDINGTOKEN
8
9
于 2013-04-09T21:06:29.770 に答える
0

awk の使用:

awk '$0 ~ /STARTINGTOKEN/ || l {l=sprintf("%s%s", l, $0)} 
     /ENDINGTOKEN/{print l; l=""}' input.file
于 2013-04-09T21:14:04.203 に答える
-1

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

sed '/STARTINGTOKEN/!b;:a;$bb;N;/ENDINGTOKEN/!ba;:b;s/\n//g' file

また:

sed -r '/(START|END)TOKEN/,//{/STARTINGTOKEN/{h;d};H;/ENDINGTOKEN/{x;s/\n//gp};d}' file
于 2013-04-10T08:00:46.360 に答える